java.time
Этот код:
- Захватывает текущий момент (дата-время)
- Формирует строку в текстуально представлять этот момент.
Обратите внимание, что это две разные концепции. Объектом с датой является не a Строка. Объект даты создает a String для представления его значения. Начинающие программисты часто сталкиваются с двумя причинами, вызывающими много путаницы и разочарования.
К сожалению, этот фрагмент кода использует некоторые старые устаревшие классы времени, которые теперь вытесняются классами java.time. Старые классы оказались плохо спроектированными, запутанными и неприятными.
Современный способ захвата текущего момента прост. Класс Instant
представляет собой момент на временной шкале в UTC с разрешением до наносекунд.
Instant instant = Instant.now();
Чтобы создать строку, представляющую этот момент в стандартном формате ISO 8601, просто вызовите toString
.
String output = instant.toString();
2016-09-12T05: 36: 55Z
Adjust в конкретной временной зоне (ZoneId
), чтобы увидеть тот же самый момент, через призму времени стены-часы этого региона.
ZoneId z = ZoneId.of("America/Montreal");
ZonedDateTime zdt = instant.atZone(z);
Опять же, чтобы сгенерировать строку, представляющую этот момент в стандартном формате ISO 8601, просто вызовите toString
. Фактически, ZonedDateTime
расширяет стандарт, мудро добавляя имя часового пояса в квадратных скобках.
String output = zdt.toString();
2016-09-12T01: 36: 55-04: 00 [Америка/Монреаль]
Для создания строк в других форматах, поиск переполнения стека для класса java.time DateTimeFormatter
,
http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html –