Как я могу создать метку времени с датой 23.09.2007?
100
По 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 .Как насчет этого?
источник
Что значит метка времени? Если вы имеете в виду миллисекунды с эпохи Unix:
Если вам нужен фактический объект java.sql.Timestamp:
источник
Calendar.SEPTEMBER
tl; dr
java.time
Давайте обновим эту страницу, показав код с использованием инфраструктуры java.time, встроенной в Java 8 и новее.
Эти новые классы созданы на основе Joda-Time , определены в JSR 310 и расширены проектом ThreeTen-Extra . Они вытесняют заведомо неудобные старые классы времени и даты, связанные с ранними версиями Java.
В java.time это
Instant
момент на шкале времени в формате UTC. AZonedDateTime
- это момент времени, настроенный на часовой пояс (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 .Выгрузить в консоль.
При запуске.
Кстати, начиная с JDBC 4.2, вы можете напрямую использовать типы java.time. Нет необходимости в
java.sql.Timestamp
.PreparedStatement.setObject
ResultSet.getObject
О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или новее. Нет необходимости в строках, нет необходимости в
java.sql.*
занятиях.Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательной площадкой для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник
Вы также можете сделать следующее:
источник
Согласно API конструктор, принимающий год, месяц и т. Д., Устарел. Вместо этого вы должны использовать конструктор, который принимает long. Вы можете использовать реализацию Calendar для создания нужной даты и доступа к представлению времени в виде длинного числа, например, с помощью метода getTimeInMillis .
источник
Для полноты картины также решение с Joda-Time версии 2.5 и его
DateTime
классом:источник
DateTime
объекту применяется текущий часовой пояс JVM по умолчанию . Это означает, что ваши результаты будут отличаться для разных компьютеров или конфигурации ОС хоста или настроек JVM. Для получения предсказуемых результатов передайте часовой пояс этомуDateTime
конструктору. Выберите подходящее название часового пояса для вашего намерения. Например,DateTimeZone.forID( "America/Montreal" )
илиDateTimeZone.UTC
.DateTime
объект в миллисекундах с начала эпохи. Заменить.toDate().getTime()
на.getMillis()
.DateTimeZone.getDefault()
и передав результат в качестве необязательного аргумента. (Между прочим, тоLocale.getDefault()
же самое для , такая же проблема с двусмысленностью необязательных аргументов.)Более общий ответ - импортировать
java.util.Date
, тогда, когда вам нужно установитьtimestamp
равное текущей дате, просто установите его равнымnew Date()
.источник