Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将日期转换为天数_Java_Date - Fatal编程技术网

Java 无法将日期转换为天数

Java 无法将日期转换为天数,java,date,Java,Date,我有一个Date实例,它代表过去的一天。尝试将其转换为天数,然后向后返回得到不同的结果 public static long date4Serialization(Date date) { return TimeUnit.DAYS.convert(date.getTime(), TimeUnit.MILLISECONDS); } public static Date deserializeDate(long value) { return new Date(TimeUnit.M

我有一个Date实例,它代表过去的一天。尝试将其转换为天数,然后向后返回得到不同的结果

public static long date4Serialization(Date date) {
    return TimeUnit.DAYS.convert(date.getTime(), TimeUnit.MILLISECONDS);
}

public static Date deserializeDate(long value) {
    return new Date(TimeUnit.MILLISECONDS.convert(value, TimeUnit.DAYS));
}

 public static void main(String []args){
    try {
        Date date = new SimpleDateFormat("dd.MM.yyyy").parse("05.05.2014");
        System.out.println(date);
        //Mon May 05 00:00:00 EDT 2014
        System.out.println(deserializeDate(date4Serialization(date)));
        //Sun May 04 20:00:00 EDT 2014T
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
 }

有什么想法吗?

看起来您只是想将日期序列化为长(毫秒),然后从长到日期反序列化

所以,这应该很简单。只需使用:

public static long date4Serialization(Date date) {
    return date.getTime();
}

public static Date deserializeDate(long value) {
    return new Date(value);
}

看起来您只是尝试将日期序列化为long(毫秒),然后从long反序列化回Date

所以,这应该很简单。只需使用:

public static long date4Serialization(Date date) {
    return date.getTime();
}

public static Date deserializeDate(long value) {
    return new Date(value);
}

看起来您只是尝试将日期序列化为long(毫秒),然后从long反序列化回Date

所以,这应该很简单。只需使用:

public static long date4Serialization(Date date) {
    return date.getTime();
}

public static Date deserializeDate(long value) {
    return new Date(value);
}

看起来您只是尝试将日期序列化为long(毫秒),然后从long反序列化回Date

所以,这应该很简单。只需使用:

public static long date4Serialization(Date date) {
    return date.getTime();
}

public static Date deserializeDate(long value) {
    return new Date(value);
}
根据文件,退货:


此日期表示的自1970年1月1日00:00:00 GMT以来的毫秒数

请注意,当您在当前时区中创建(或解析)日期时,它表示“GMT”。这基本上给出了部分天数,四舍五入为一个长整数。你自己似乎暗示你希望它出现在“EDT”时区

如果只是为了序列化和反序列化,为什么不使用毫秒数而不是天数来序列化呢。那会马上解决你的问题吗

[更新]

我还想指出,TimeUnit是
java.util.concurrent
包的一部分。这个包中的类的作用域不是进行日期/时间转换,而是支持并发编程

如果您真的想,那么我想用这段Java 8代码激发您的好奇心:

 public static void main(String []args){
    LocalDate zero = LocalDate.of(1970, Month.JANUARY, 1);
    LocalDate ld = LocalDate.now();
    System.out.println(ld);
    long days = zero.until(ld,ChronoUnit.DAYS);
    System.out.println("days: "+days);
    LocalDate ld2 = zero.plusDays(days);
    System.out.println(ld2);
 }
键是使用的,它为您提供无时间或时区的日期表示

其他人可能建议使用。

根据文档,返回:


此日期表示的自1970年1月1日00:00:00 GMT以来的毫秒数

请注意,当您在当前时区中创建(或解析)日期时,它表示“GMT”。这基本上给出了部分天数,四舍五入为一个长整数。你自己似乎暗示你希望它出现在“EDT”时区

如果只是为了序列化和反序列化,为什么不使用毫秒数而不是天数来序列化呢。那会马上解决你的问题吗

[更新]

我还想指出,TimeUnit是
java.util.concurrent
包的一部分。这个包中的类的作用域不是进行日期/时间转换,而是支持并发编程

如果您真的想,那么我想用这段Java 8代码激发您的好奇心:

 public static void main(String []args){
    LocalDate zero = LocalDate.of(1970, Month.JANUARY, 1);
    LocalDate ld = LocalDate.now();
    System.out.println(ld);
    long days = zero.until(ld,ChronoUnit.DAYS);
    System.out.println("days: "+days);
    LocalDate ld2 = zero.plusDays(days);
    System.out.println(ld2);
 }
键是使用的,它为您提供无时间或时区的日期表示

其他人可能建议使用。

根据文档,返回:


此日期表示的自1970年1月1日00:00:00 GMT以来的毫秒数

请注意,当您在当前时区中创建(或解析)日期时,它表示“GMT”。这基本上给出了部分天数,四舍五入为一个长整数。你自己似乎暗示你希望它出现在“EDT”时区

如果只是为了序列化和反序列化,为什么不使用毫秒数而不是天数来序列化呢。那会马上解决你的问题吗

[更新]

我还想指出,TimeUnit是
java.util.concurrent
包的一部分。这个包中的类的作用域不是进行日期/时间转换,而是支持并发编程

如果您真的想,那么我想用这段Java 8代码激发您的好奇心:

 public static void main(String []args){
    LocalDate zero = LocalDate.of(1970, Month.JANUARY, 1);
    LocalDate ld = LocalDate.now();
    System.out.println(ld);
    long days = zero.until(ld,ChronoUnit.DAYS);
    System.out.println("days: "+days);
    LocalDate ld2 = zero.plusDays(days);
    System.out.println(ld2);
 }
键是使用的,它为您提供无时间或时区的日期表示

其他人可能建议使用。

根据文档,返回:


此日期表示的自1970年1月1日00:00:00 GMT以来的毫秒数

请注意,当您在当前时区中创建(或解析)日期时,它表示“GMT”。这基本上给出了部分天数,四舍五入为一个长整数。你自己似乎暗示你希望它出现在“EDT”时区

如果只是为了序列化和反序列化,为什么不使用毫秒数而不是天数来序列化呢。那会马上解决你的问题吗

[更新]

我还想指出,TimeUnit是
java.util.concurrent
包的一部分。这个包中的类的作用域不是进行日期/时间转换,而是支持并发编程

如果您真的想,那么我想用这段Java 8代码激发您的好奇心:

 public static void main(String []args){
    LocalDate zero = LocalDate.of(1970, Month.JANUARY, 1);
    LocalDate ld = LocalDate.now();
    System.out.println(ld);
    long days = zero.until(ld,ChronoUnit.DAYS);
    System.out.println("days: "+days);
    LocalDate ld2 = zero.plusDays(days);
    System.out.println(ld2);
 }
键是使用的,它为您提供无时间或时区的日期表示


其他人可能建议使用。

由于时间单位转换函数舍入到较低的值,您的代码可能会导致1天的错误。 请阅读此处的convert命令:


如果答案不正确,请在问题中详细说明您发现的差异(随机、多天或其他情况)

由于时间单位转换函数舍入到较低的值,您的代码可能会导致1天的错误。 请阅读此处的convert命令:


如果答案不正确,请在问题中详细说明您发现的差异(随机、多天或其他情况)

由于时间单位转换函数舍入到较低的值,您的代码可能会导致1天的错误。 请阅读此处的convert命令:

如果答案不正确,请在您的问题上详细说明您发现的差异(随机、多天或其他情况)

您的代码可能会重复