Преобразование эпохи в строковом формате в дату без отметки времени - PullRequest
1 голос
/ 27 мая 2020

Я получаю даты в эпоху от API. Они имеют строковый формат, и я хочу просто преобразовать их в дату без часов, минут и секунд в формате дд / мм / гггг. Пример:

  String epochDate = "1590476643";

Я пытался просто преобразовать его с меткой времени, и я получаю этот результат с этим logi c. Я получаю дату 1970 года, когда время эпохи начинается со вчерашнего дня, 26 мая.

Date d = new Date(Long.parseLong(epochDate));
Timestamp ts= new Timestamp(d.getTime());

RESULT = 1970-01-19 10:47:56 SHOULD BE 26-05-2020

Как я могу преобразовать строку в дату и формат?

Ответы [ 3 ]

1 голос
/ 27 мая 2020

Используйте LocalDate только для даты сохранения и Instant.ofEpochSecond для преобразования

LocalDate localDate = Instant.ofEpochSecond(Long.parseLong("1590476643")).atZone(ZoneId.systemDefault()).toLocalDate();

И форматируйте как строку

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String formattedString = localDate.format(formatter);
0 голосов
/ 27 мая 2020

Я настоятельно рекомендую вам использовать java.time и избегать java.util для операций datetime.
Ваши String секунд эпохи могут быть преобразованы в java.time.LocalDate следующим образом:

public static void main(String[] args) {
    // you seem to receive a datetime in epoch seconds
    String epochDate = "1590476643";
    long epochDateAsLong = Long.parseLong(epochDate);
    // so create an object representing a moment in time from the epoch seconds as long
    Instant instant = Instant.ofEpochSecond(epochDateAsLong);
    // create a LocalDateTime object from that instant and apply a desired time zone
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.of("UTC"));
    // create a LocalDate from this LocalDateTime (that means taking just the date part of it)
    LocalDate localDate = localDateTime.toLocalDate();
    // and print it
    System.out.println(localDate);

    // if you really need a Date, then use legacy compatibility, but try to avoid it
    Date date = Date.from(instant);

    // printing outdated class omitted...
}

а затем просто выводит

2020-05-26

, вы можете изменить формат вывода, используя DateTimeFormatter.

0 голосов
/ 27 мая 2020

Вы можете использовать DateFormat и SimpleDateFormat из java .text пакета,

String epochDate = "1590476643";
Date d = new Date(Long.parseLong(epochDate));
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String epochDateString = formatter.format(d);
...