Методы DateTime.now () и новый DateTime (System.currentTimeMillis ()) одинаковы в Java? - PullRequest
1 голос
/ 02 апреля 2019

Мне нужно знать, в java (моя версия jdk 8) я могу заменить, new DateTime(System.currentTimeMillis()) эту кодовую форму, 'DateTime.now()'?

Я использовал пакет import org.joda.time.DateTime;

Как написать то же самое в Java 8 (дата и время)?

Ответы [ 4 ]

3 голосов
/ 02 апреля 2019

tl; dr

java.time.Instant.now()  // Capture the current moment in UTC. 

Внутри момент отслеживается как количество целых секунд плюс доля секунды как количество наносекунд, начиная с эталонной эпохи 1970-01-01T00: 00: 00Z(Z означает UTC).

java.time

Ваш класс DateTime очевидно из библиотеки Joda-Time.Создатель этой библиотеки Стивен Колебурн заменил Joda-Time классами java.time , встроенными в Java 8 и более поздние версии, в соответствии с JSR 310.

Instant

На мгновение в UTC, используйте Instant.Чтобы зафиксировать текущий момент в UTC, Instant.now().

Instant представляет количество наносекунд с начала отсчета эпохи первого момента 1970 года в UTC.

Вызов System.currentTimeMillis() такой же, счет с начала UTC 1970 года, за исключением более грубого разрешения в миллисекундах, а не в наносекундах.На практике обычные компьютерные часы не могут точно отслеживать текущий момент в наносекундах, поэтому захват текущего момента с помощью Instant может захватывать только микросекунды (обычно в Java 9 и более поздних версиях) или миллисекунды (в Java 8).

Результат: нет необходимости звонить System.currentTimeMillis().Вместо этого используйте Instant.now().

ZonedDateTime

Эквивалент DateTime будет ZonedDateTime.Этот класс представляет момент, который виден через часы настенного времени, используемые людьми определенного региона (часового пояса).

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

3 голосов
/ 02 апреля 2019

В Java 8 DateTime отображается на java.time.ZonedDateTime и java.time.OffsetDateTime.

Эта страница написана создателем / автором / сопровождающим Joda Time и рекомендует:

Если вы пишете код в Java SE 8, самое время перейти на java.time ...

1 голос
/ 02 апреля 2019

Да.

Это соответствующий код:

public BaseDateTime() {
    this(DateTimeUtils.currentTimeMillis(), ISOChronology.getInstance());
}
public BaseDateTime(long instant) {
    this(instant, ISOChronology.getInstance());
}
1 голос
/ 02 апреля 2019

Да.new DateTime(System.currentTimeMillis()) позвонит

public DateTime(long instant) {
    super(instant);
}

, затем

public BaseDateTime(long instant) {
    this(instant, ISOChronology.getInstance());
}

, а DateTime.now() позвонит

public static DateTime now() {
    return new DateTime();
}

, затем

public DateTime() {
    super();
}

, затем

public BaseDateTime() {
    this(DateTimeUtils.currentTimeMillis(), ISOChronology.getInstance());
}

, что аналогично первому способу.

...