Как мне преобразовать «долю дня» во время Java?

#java #excel #datetime #time

#java #excel #дата-время #время

Вопрос:

Я работаю с форматом Excel, где

0.6549

Означает, что мы выполнили 65,49% за день. Как бы мне преобразовать это в приятное время, например

15:30:42 вечера

в Java?

Ответ №1:

Попробуйте это:

 public static void main(String[] args) throws Exception {
    DateFormat format = new SimpleDateFormat("HH:mm:ss a");
    format.setTimeZone(TimeZone.getTimeZone("UTC"));
    for(String fracStr : args) {
        double frac = Double.parseDouble(fracStr);
        long day = (long) Math.floor(frac);
        frac = frac - day;
        Date time = new Date((long) ( 86400000l * frac));
        System.out.println(fracStr " -> " format.format(time));
    }
}
  

Небольшое замечание здесь — часовой пояс GMT может не дать вам ожидаемых результатов, но UTC даст. Это потому, что Java считает GMT допустимой аббревиатурой для Europe / London, а между 1968 и 1972 годами Лондон постоянно переходил на летнее время. Таким образом, полночь 1 января 1970 года по Гринвичу (эпоха Java) также равна 1 часу ночи 1 января 1970 года (GMT).