Необходимо четко понимать, что объекты значений даты и времени и объекты форматирования играют разные роли.
- Объект даты и времени не имеет формата, он представляет дату и / или время суток с контекстом часового пояса или со смещением от UT C или без него.
- Форматер не имеет значения, даты и времени суток. Работа форматера состоит в том, чтобы работать с объектом даты и времени для создания текста в определенном формате, представляющем значение этого объекта даты и времени.
Таким образом, отслеживание количества миллисекунд, так как ссылка на эпоху является задачей объект даты и времени, а не форматер. Создание удобочитаемого текста - работа форматера. Поэтому нет, средство форматирования не производит подсчет миллисекунд.
И, нет, вам не следует использовать подсчет миллисекунд для передачи значений даты и времени. Такие цифры не имеют смысла для читателя, что приводит к тому, что легко пропустить ошибочные данные. И такие данные не могут легко идентифицировать себя - это целые секунды, миллисекунды, микросекунды или наносекунды? И какова эталонная дата эпохи, какая из пары дюжин обычно используемых эпох ?
Вместо этого сообщайте значения даты и времени в виде текста, используя стандартные форматы ISO 8601.
Другая проблема: вы используете ужасные классы даты и времени, которые были заменены годами на go современными java .time классами, определенными в JSR 310.
Если ваш номер отсчет миллисекунд с начала отсчета эпохи первого момента 1970 года в UT C, анализируется как Instant
.
Instant instant = Instant.ofEpochMilli( 1_578_738_100_000L ) ;
Если вы настаиваете на работе с отсчетом времени против моего совета, Вы можете запросить Instant
.
long milliseconds = instant.toEpochMilli() ;
Создать текст в стандартном формате ISO 8601.
String output = instant.toString() ;
Для других форматов установите Instant
в OffsetDateTime
или ZonedDateTime
объекта и генерировать текст с DateTimeFormatter
. Все это уже освещалось много, много раз. Поэтому ищите переполнение стека, чтобы узнать больше.
instant
.atZone(
ZoneId.of( "America/Montreal" )
)
.format(
DateTimeFormatter
.ofLocalizedDateTime( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
)
Наконец, имейте в виду, что, хотя унаследованные классы были ограничены разрешением в миллисекундах, классы java .time вращаются до гораздо более мелких наносекунд. Поэтому остерегайтесь возможной потери данных при вызове Instant::toEpochMilli
, так как любые микросекунды или наносекунды игнорируются,