Как я могу создать метку времени с датой 23.09.2007?
Отметка времени Java - Как я могу создать отметку времени с датой 23.09.2007?
Ответы (8)
Под Timestamp
я полагаю, вы имеете в виду java.sql.Timestamp
. Вы заметите, что у этого класса есть конструктор, который принимает аргумент long
. Вы можете проанализировать это с помощью класса DateFormat
:
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);
java.util.Date
, java.util.Calendar
, и java.text.SimpleDateFormat
теперь являются устаревшими и заменены java.time классы, встроенные в Java 8 и новее . См. Руководство от Oracle.
- person Basil Bourque; 25.01.2019
Что насчет этого?
java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf("2007-09-23 10:10:10.0");
Что значит метка времени? Если вы имеете в виду миллисекунды с эпохи Unix:
GregorianCalendar cal = new GregorianCalendar(2007, 9 - 1, 23);
long millis = cal.getTimeInMillis();
Если вам нужен фактический объект java.sql.Timestamp:
Timestamp ts = new Timestamp(millis);
Calendar.SEPTEMBER
- person Guillaume Husta; 16.05.2014
tl;dr
java.sql.Timestamp.from (
LocalDate.of ( 2007 , 9 , 23 )
.atStartOfDay( ZoneId.of ( "America/Montreal" ) )
.toInstant()
)
java.time
Давайте обновим эту страницу, показав код с помощью java Фреймворк .time встроен в Java 8 и новее.
Эти новые классы созданы на основе Joda-Time, определяемой JSR 310 и расширен ThreeTen-Extra. Они вытесняют заведомо неудобные старые классы времени и даты, связанные с ранними версиями Java.
В java.time Instant
- это момент на шкале времени в формате UTC. ZonedDateTime
- это момент времени, настроенный на часовой пояс (ZoneId
).
Часовой пояс здесь имеет решающее значение. Дата September 23, 2007
не может быть переведена в момент на временной шкале без применения часового пояса. Учтите, что новый день в Париже начинается раньше, чем в Монреале, где он еще «вчера».
Кроме того, java.sql.Timestamp представляет дату и время дня. Поэтому мы должны ввести время дня, чтобы соответствовать дате. Мы предполагаем, что вы хотите, чтобы в качестве времени суток использовался первый момент дня. Обратите внимание, что это не всегда время 00:00:00.0
из-за перехода на летнее время и, возможно, других аномалий.
Обратите внимание, что в отличие от старого класса java.util.Date и в отличие от Joda-Time типы java.time имеют разрешение наносекунды, а не миллисекунды. Это соответствует разрешению java.sql.Timestamp.
Обратите внимание, что java.sql.Timestamp имеет неприятную привычку неявно применять текущий часовой пояс JVM по умолчанию к его значению даты и времени при генерации строкового представления с помощью метода toString
. Здесь вы видите, что применен мой America/Los_Angeles
часовой пояс. Напротив, классы java.time более разумны и используют стандартные форматы ISO 8601.
LocalDate d = LocalDate.of ( 2007 , 9 , 23 ) ;
ZoneId z = ZoneId.of ( "America/Montreal" ) ;
ZonedDateTime zdt = d.atStartOfDay( z ) ;
Instant instant = zdt.toInstant() ;
java.sql.Timestamp ts = java.sql.Timestamp.from ( instant ) ;
Выгрузить в консоль.
System.out.println ( "d: " + d + " = zdt: " + zdt + " = instant: " + instant + " = ts: " + ts );
При запуске.
d: 2007-09-23 = zdt: 2007-09-23T00: 00-04: 00 [Америка / Монреаль] = мгновенно: 2007-09-23T04: 00: 00Z = ts: 2007-09-22 21:00: 00.0
Кстати, начиная с JDBC 4.2, вы можете напрямую использовать типы java.time. Нет необходимости в java.sql.Timestamp
.
PreparedStatement.setObject
ResultSet.getObject
О java.time
java.time em > фреймворк встроен в Java 8 и новее. Эти классы заменяют неудобные старые устаревшие классы даты и времени, такие как _ 14_, _ 15_, & _ 16_.
Проект Joda-Time теперь в режим обслуживания, советует перейти на классы java.time.
Чтобы узнать больше, см. Учебник Oracle a >. И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310.
Вы можете обмениваться объектами java.time непосредственно с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или новее. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где взять классы java.time?
- Java SE 8, Java SE 9, Java SE 10, Java SE 11, and later - Part of the standard Java API with a bundled implementation.
- Java 9 adds some minor features and fixes.
- Java SE 6 and Java SE 7
- Most of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
- Android
- Later versions of Android bundle implementations of the java.time classes.
- Для более ранней версии Android (‹26) ThreeTenABP a> проект адаптирует ThreeTen-Backport (упомянутый выше). См. Как использовать ThreeTenABP….
Проект ThreeTen-Extra расширяет java.time дополнительными классами. . Этот проект является испытательной площадкой для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, например _18 _, YearWeek
, _ 20_ и подробнее.
Вы также можете сделать следующее:
// untested
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 23);// I might have the wrong Calendar constant...
cal.set(Calendar.MONTH, 8);// -1 as month is zero-based
cal.set(Calendar.YEAR, 2009);
Timestamp tstamp = new Timestamp(cal.getTimeInMillis());
Согласно API конструктор, который accept year, month и т. д. устарел. Вместо этого вы должны использовать конструктор, который принимает long. Для создания дату, которую вы хотите, и доступ к представлению времени как длинный, например, с помощью getTimeInMillis.
Для полноты картины также предлагается решение с Joda-Time версии 2.5 и его _ 1_ класс:
new Timestamp(new DateTime(2007, 9, 23, 0, 0, DateTimeZone.forID( "America/Montreal" )).getMillis())
DateTime
. Это означает, что ваши результаты будут отличаться на разных компьютерах, в зависимости от конфигурации ОС хоста или настроек JVM. Для получения предсказуемых результатов передайте часовой пояс этому DateTime
конструктору. Выберите подходящее название часового пояса в соответствии с вашим намерением. Например, DateTimeZone.forID( "America/Montreal" )
или DateTimeZone.UTC
.
- person Basil Bourque; 13.10.2014
DateTime
миллисекунды с начала эпохи. Замените .toDate().getTime()
на _3 _ а>.
- person Basil Bourque; 13.10.2014
DateTimeZone.getDefault()
и передав результат в качестве необязательного аргумента. (Между прочим, то же самое для Locale.getDefault()
, такая же проблема из-за неоднозначности необязательных аргументов.)
- person Basil Bourque; 22.06.2016
Более общий ответ - импортировать java.util.Date
, тогда, когда вам нужно установить timestamp
равным текущей дате, просто установите его равным new Date()
.