如何使用Java 8在UTC中将java.sql.Date转换为Days并将Days和Days转换为java.sql.Date?

时间:2018-10-03 07:07:06

标签: java

我正在尝试将java.sql.Date转换为Days,然后将Days转换回java.sql.Date,所有时间都是UTC,但我相信我要过一天。

我尝试过millis1millis2一天休息一下。

import java.sql.Date;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.TimeUnit;

public class TestDate {
    public static void main(String... args) {
        String str="2015-03-31";
        Date date=Date.valueOf(str);
        long millis1 = date.getTime();
        System.out.println(millis1);
        int days = getDaysFromDate(date);
        long millis2 = getDateFromDays(days).getTime();
        System.out.println(millis2);
    }

    public static int getDaysFromDate(Date date) {
        return (int)ChronoUnit.DAYS.between(Instant.EPOCH, Instant.ofEpochMilli(date.getTime()));
    }

    public static Date getDateFromDays(int daysSinceEpoch) {
        return new Date(TimeUnit.DAYS.toMillis(daysSinceEpoch));
    }
}

1 个答案:

答案 0 :(得分:0)

当从毫秒转换为天,然后从天转换回毫秒时,您将丢失数据。

在您的情况下,millis1millis2等于相同数量的DAYS(16525),但是方法调用后millis2的毫秒数会减少,因为请考虑未计入DAY的额外时间。额外的时间很可能来自leap年。 使用ChronoUnit.DAYS时,日期应等于中午。