Java: Дата из метки времени unix
мне нужно преобразовать временную метку unix в объект даты.
Я попробовал:
java.util.Date time = new java.util.Date(timeStamp);
значение timestamp: 1280512800
дата должна быть "2010/07/30 - 22:30:00" (как я получаю его PHP), но вместо этого я получаю Thu Jan 15 23:11:56 IRST 1970
.
как это сделать?
8 ответов
на 1280512800
, умножьте на 1000, так как java ожидает миллисекунды:
java.util.Date time=new java.util.Date((long)timeStamp*1000);
Если у вас уже были миллисекунды, то просто new java.util.Date((long)timeStamp);
С документация:
выделяет объект Date и инициализирует ее представлять заданное количество миллисекунд с момента стандартное базовое время, известное как " the эпоха", а именно 1 января 1970 года, 00: 00: 00 GMT.
java.время
Java 8 введен новый API для работы с датами и временем:java.пакет времени.
С java.время вы можете использовать:
Date date = Date.from( Instant.ofEpochSecond( timeStamp ) );
An МиГ представляет метку времени в Java 8. Со статикой Date.from()
метод вы можете преобразовать Instant
до java.util.Date
экземпляра.
похоже, что календарь-это новый способ:
Calendar mydate = Calendar.getInstance();
mydate.setTimeInMillis(timestamp*1000);
out.println(mydate.get(Calendar.DAY_OF_MONTH)+"."+mydate.get(Calendar.MONTH)+"."+mydate.get(Calendar.YEAR));
последняя строка - это просто пример того, как ее использовать, это будет печатать, например, "14.06.2012".
Если вы использовали систему.currentTimeMillis () для сохранения метки времени вам не нужна часть "*1000".
Если у вас есть метка времени в строке, вам нужно сначала разобрать ее как длинную: Длинный.parseLong(типа timestamp).
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
tl; dr
Instant.ofEpochSecond( 1_280_512_800L )
2010-07-30T18:00:00Z
java.время
новая java.временные рамки, встроенные в Java 8 и более поздние версии, являются преемниками Joda-Time.
эти новые классы включают в себя удобный заводской метод для преобразования количества целых секунд от эпохи. Вы получаете Instant
, момент на временной шкале в UTC с разрешением до наносекунд.
Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
мгновенный.toString (): 2010-07-30T18:00: 00Z
видно, что запустить код видео на IdeOne.com.
Asia/Kabul
или Asia/Tehran
часовых поясах ?
вы сообщили о получении значения времени суток 22: 30 вместо 18: 00, увиденного здесь. Я подозреваю, что ваша утилита PHP неявно применяет часовой пояс по умолчанию для настройки из UTC. Мое значение здесь-UTC, обозначаемое Z
(сокращенно Zulu
, означает UTC). Любой шанс, что ваша машина OS или PHP значение Asia/Kabul
или Asia/Tehran
часовых поясах? Полагаю, так как вы сообщаете IRST
в вашем выходе, что, по-видимому, означает иранское время. В настоящее время в 2017 году это единственные зоны работает с летним временем, которое на четыре с половиной часа опережает UTC.
указать правильное название часового пояса в формате continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
. Никогда не используйте аббревиатуру из 3-4 букв as EST
или IST
или IRST
как они не истинные часовые пояса, не стандартизированные и даже не уникальные(!).
если вы хочу чтобы увидеть свой момент через объектив часового пояса конкретного региона, примените ZoneId
и ZonedDateTime
. Все тот же одновременный момент, но видимый как другой времени.
ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z ); // Same moment, same point on timeline, but seen as different wall-clock time.
2010-07-30T22:30+04:30[Азия/Тегеран]
преобразование из java.время для устаревших классов
вы должны придерживаться новой java.классы время. Но вы можете конвертировать в старый, если потребуется.
java.util.Date date = java.util.Date.from( instant );
Joda Времени
обновление:Joda Времени сейчас режим обслуживания, с командой, консультирующей миграцию в java.время классы.
FYI, конструктор для Joda Времени DateTime аналогично: умножьте на тысячу, чтобы получить long
(а не int
!).
DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
лучше избегать заведомо хлопотной java.утиль.Сроки и. Календарные занятия. Но если вы должны использовать дату, вы можете конвертировать из Joda-Time.
java.util.Date date = dateTime.toDate();
о java.время
на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
на Joda Времени, теперь режим обслуживания, советует миграцию в java.время классы.
чтобы узнать больше, см. В Oracle Учебник. Поиск переполнения стека много примеров и объяснений. Спецификация JSR 310.
вы можете обменять java.время объекты непосредственно с вашей базой данных. Используйте драйвер JDBC соответствуют JDBC 4.2 или позже. Нет необходимости в строках, нет необходимости в java.sql.*
классы.
где получить java.время занятий?
-
Java SE 8, Java SE 9, и позже
- встроенный.
- часть стандартного API Java со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
-
Java SE 6 и Java SE 7
- большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
-
Android
- более поздние версии Android bundle реализации java.классы время.
- для более раннего Android (ThreeTenABP проект приспосабливается ThreeTen-Backport (упоминалось выше). См.как использовать ThreeTenABP....
на ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.
конструктор Date ожидает, что значение метки времени будет в миллисекундах. Умножьте значение вашей метки времени на 1000, затем передайте его конструктору.
Если вы преобразуете значение метки времени на другой машине, вы также должны проверить часовой пояс этой машины. Например:
вышеуказанные декрипции приведут к различным значениям даты, если вы работаете с часовыми поясами EST или UTC.
чтобы установить часовой пояс; он же UTC, вы можете просто переписать;
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
java.util.Date time= new java.util.Date((Long.parseLong(timestamp)*1000));