java.time
И старые классы даты и времени, связанные с Java, и сторонняя библиотека Joda-Time были заменены инфраструктура java.time, встроенная в Java 8 и новее. Эти классы заменяют старые неприятные классы времени и даты, такие как java.util.Date
. См. Учебник Oracle. Большая часть функций java.time перенесена на Java 6 и 7 в ThreeTen-Backport и дополнительно адаптирован для Android в ThreeTenABP.
Кстати, никогда не ссылайтесь на offset-from-UTC с одной цифрой часов, например as -7
, поскольку это нестандартно и несовместимо с различными протоколами и библиотеками. Всегда вводите ноль для второй цифры, например -07
.
Если у вас есть только смещение, а не часовой пояс, используйте класс OffsetDateTime
.
ZoneOffset offset = ZoneOffset.ofHours( -7 );
OffsetDateTime odt = OffsetDateTime.now( offset );
String output1 = odt.toLocalTime().toString();
System.out.println( "Current time in " + offset + ": " + output1 );
Текущее время в -07: 00: 19: 41: 36.525
Если у вас есть полный часовой пояс, который является смещением плюс набор правил для обработки аномалий, таких как переход на летнее время (DST), а не просто смещение от UTC, используйте класс ZonedDateTime
.
ZoneId denverTimeZone = ZoneId.of( "America/Denver" );
ZonedDateTime zdt = ZonedDateTime.now( denverTimeZone );
String output2 = zdt.toLocalTime().toString();
System.out.println( "Current time in " + denverTimeZone + ": " + output2 );
Точное время в Америке / Денвере: 20:41: 36.560
См. этот код в действии на Ideone.com.
Джода-Тайм
Вы можете использовать Joda-Time 2.7 в Android. Делает работу с датой и временем намного проще.
DateTimeZone zone = DateTimeZone.forID ( "America/Denver" );
DateTime dateTime = new DateTime ( zone );
String output = dateTime.toLocalTime ().toString ();
сбросить в консоль.
System.out.println ( "zone: " + zone + " | dateTime: " + dateTime + " | output: " + output );
При запуске…
зона: Америка / Денвер | dateTime: 2016-07-11T20: 50: 17.668-06: 00 | вывод: 20: 50: 17.668
Считать с эпохи
Я настоятельно не рекомендую отслеживать по времени по count-Since- эпоха. Но при необходимости вы можете извлечь внутренние миллисекунды с начала эпохи Joda-Time (Unix time, первый момент 1970 года по всемирному координированному времени), вызвав _ 10_ в DateTime
.
Обратите внимание на использование 64-битного long
, а не 32-битного int
примитива типы.
В java.time. Имейте в виду, что здесь вы можете терять данные, поскольку java.time имеет разрешение до наносекунд. Переход от наносекунд к миллисекундам означает усечение до шести цифр десятичной доли секунды (3 цифры для миллисекунд, 9 для наносекунд).
long millis = Instant.now ().toEpochMilli ();
В Джода-Тайм.
long millis = DateTime.now( denverTimeZone ).getMillis();
person
Basil Bourque
schedule
28.11.2013
SimpleDateFormat
, или вы имели в виду дату и время, как показано в этой последней строке сreturn
? - person Basil Bourque   schedule 12.07.2016