java.time
String humanDateOfData = Instant.ofEpochSecond(timeOfData)
.atZone(ZoneId.systemDefault())
.format(dateFormatter);
Вы можете объявить форматер даты только один раз в своем классе, вместо того, чтобы создавать новый для каждого вызова toString
:
static DateTimeFormatter dateFormatter
= DateTimeFormatter.ofPattern("dd/MM/uuuu", Locale.US);
Вкл.мой компьютер в часовом поясе Европы / Копенгагена дал humanDateOfData
18/12/2018
, который вы теперь можете использовать в возвращаемом значении toString
.
В этом случае код длиннее, чем ваш код, но я все еще горячо рекомендую это.Используемые вами классы даты и времени, Date
и SimpleDateFormat
, плохо спроектированы, что, как известно, проблематично.Они также давно устарели.Вместо этого я использую java.time, современный API даты и времени Java, который вышел в 2014 году. Кроме того, хотя умножение на 1000 может показаться простым, выполнение ваших собственных преобразований времени очень часто сложно и подвержено ошибкам, так что это плохая привычкапопасть внутрь.Instant
напрямую принимает секунды с начала эпохи, так что это больше не нужно.Наконец, современный код делает явным, что часовой пояс используется для определения даты, мне это нравится.Если вы знаете часовой пояс, вы также можете указать, какой из них, например, ZoneId.of("Asia/Harbin")
.
Lonk: Oracle Tutotial: Дата и время