Java 无法将日期转换为天数
我有一个Date实例,它代表过去的一天。尝试将其转换为天数,然后向后返回得到不同的结果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
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命令: 如果答案不正确,请在您的问题上详细说明您发现的差异(随机、多天或其他情况)您的代码可能会重复