Мне нужно преобразовать метку времени Unix в объект даты.
Я попробовал это:
java.util.Date time = new java.util.Date(timeStamp);
Значение метки времени: 1280512800
Дата должна быть «2010/07/30 - 22:30:00» (как я понимаю по PHP), но вместо этого я получаю Thu Jan 15 23:11:56 IRST 1970
.
Как это должно быть сделано?
java.util.Date
теперь, унаследованы , заменены классами java.time . Смотрите Учебник по Oracle .Ответы:
Для
1280512800
, умножьте на 1000, так как Java ожидает миллисекунды:Если у вас уже были миллисекунды, то просто
new java.util.Date((long)timeStamp);
Из документации :
источник
(long)
очень важно: без него целое число переполняется.java.util.Date
- это полное имя класса.Date
Вероятно, это то же самое, если вы импортируетеjava.util
пакет в свой класс.Date time = new Date(TimeUnit.MILLISECONDS.convert(unixTimestamp, TimeUnit.SECONDS));
java.util.Date
теперь, унаследованы , заменены классами java.time . Смотрите Учебник по Oracle .java.time
Java 8 представила новый API для работы с датами и временем: пакет java.time .
С помощью java.time вы можете анализировать количество секунд с начала отсчета эпохи первого момента 1970 года в UTC, 1970-01-01T00: 00Z. Результатом является
Instant
.Если вам нужно
java.util.Date
взаимодействовать со старым кодом, который еще не обновлен для java.time , конвертируйте. Вызовите новые методы преобразования, добавленные к старым классам.источник
java.util.Date
. Старые классы унаследованы и их следует избегать. Хотя вы действительно можете конвертировать в / из старых классов и классов java.time, лучше по возможности придерживаться java.time.Это правильный путь:
источник
Похоже, календарь это новый путь:
Последняя строка - это просто пример того, как ее использовать, например, «14.06.2012».
Если вы использовали System.currentTimeMillis () для сохранения метки времени, вам не нужна часть «* 1000».
Если у вас есть временная метка в строке, вам нужно сначала проанализировать ее как long: Long.parseLong (timestamp).
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
источник
timestamp
это целое число, вам нужно привести его к(long)
первому, иначе вы получите неправильные даты.mydate.setTimeInMillis((long) timestamp*1000);
java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь унаследованные , вытеснены классами java.time, встроенными в Java 8 и более поздние версии . Смотрите Учебник по Oracle .ТЛ; др
java.time
Новый фреймворк java.time, встроенный в Java 8 и более поздние версии, является преемником Joda-Time.
Эти новые классы включают удобный фабричный метод для преобразования количества целых секунд от эпохи. Вы получаете
Instant
мгновение на временной шкале в UTC с разрешением до наносекунд.Посмотрите, как работает этот код на IdeOne.com .
Asia/Kabul
илиAsia/Tehran
часовые пояса?Вы сообщили о получении значения времени дня 22:30 вместо 18:00, показанного здесь. Я подозреваю, что ваша утилита PHP неявно применяет часовой пояс по умолчанию для настройки из UTC. Мое значение здесь - UTC, обозначенное как
Z
(сокращение отZulu
UTC). Есть ли шанс, что на вашей машине установлена ОС или PHPAsia/Kabul
илиAsia/Tehran
часовые пояса? Полагаю, что так, как вы сообщаетеIRST
в своих материалах, это, по-видимому, означает иранское время В настоящее время в 2017 году это единственные зоны, работающие в летнее время, которое на четыре с половиной часа опережает UTC.Укажите правильное время имя зоны в формате
continent/region
, напримерAmerica/Montreal
,Africa/Casablanca
илиPacific/Auckland
. Никогда не используйте 3-4 письмо аббревиатуры , такие какEST
илиIST
илиIRST
как они не настоящие часовые пояса, не стандартизирован, и даже не единственный (!).Если вы хотите увидеть свой момент через призму часового пояса определенного региона, примените a,
ZoneId
чтобы получить aZonedDateTime
. Все тот же одновременный момент, но рассматриваемый как другое время настенных часов .Преобразование из java.time в унаследованные классы
Вы должны придерживаться новых классов java.time. Но вы можете конвертировать в старый, если требуется.
Joda времени
ОБНОВЛЕНИЕ: проект Joda-Time сейчас находится в режиме обслуживания , и команда рекомендует перейти на классы java.time .
К вашему сведению, конструктор Joda-Time DateTime похож: умножьте на тысячу, чтобы получить
long
(неint
!).Лучше всего избегать печально известных классов java.util.Date и .Calendar. Но если вам нужно использовать дату, вы можете конвертировать из Joda-Time.
О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии . Нет необходимости в строках, нет необходимости в
java.sql.*
классах.Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник
Конструктор даты ожидает, что значение timeStamp будет в миллисекундах. Умножьте значение вашей временной метки на 1000, затем передайте значение конструктору.
источник
Если вы конвертируете значение метки времени на другом компьютере, вам также следует проверить часовой пояс этого компьютера. Например;
Приведенные выше описания приведут к различным значениям даты, если вы работаете с часовыми поясами EST или UTC.
Установить часовой пояс; или UTC, вы можете просто переписать;
источник
Для котлин
источник
Иногда вам нужно работать с настройками.
Не используйте бросок на долго! Используйте нанорегулировку.
Например, используя Oanda Java API для торговли, вы можете получить datetime в формате UNIX.
Например: 1592523410.590566943
ты получаешь:
Также используйте:
источник
источник