将Unix时间戳转换为Java日期
代码如下:将Unix时间戳转换为Java日期,java,date-format,Java,Date Format,代码如下: DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String logTime = format.format(new Date((format.parse("2013-6-30").getTime()+25*24*3600*1000))); String logTime1 = format.format(new Date((format.parse("2013-6-30").getTime()+24*24
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String logTime = format.format(new Date((format.parse("2013-6-30").getTime()+25*24*3600*1000)));
String logTime1 = format.format(new Date((format.parse("2013-6-30").getTime()+24*24*3600*1000)));
System.out.println("logTime: "+logTime);
System.out.println("logTime1: "+logTime1);
这是输出:
logTime: 2013-06-05
logTime1: 2013-07-24
这里怎么了?您有一个溢出。试一试
25L * 24*3600*1000
因此,该值是一个很长的值。您的IDE应该突出显示您拥有的将溢出
这会打印一个明显不正确的数字
-2134967296
印刷品
time + 25d: 2013-07-25
time + 24d: 2013-07-24
你有一个溢出。试一试
25L * 24*3600*1000
因此,该值是一个很长的值。您的IDE应该突出显示您拥有的将溢出
这会打印一个明显不正确的数字
-2134967296
印刷品
time + 25d: 2013-07-25
time + 24d: 2013-07-24
不知道你为jetbrains工作!;-)(ps:netbeans没有给出任何警告…pfff)我使用Ecipse,因为它是java的IDE,我认为Eclipse应该像在命令行上一样编译代码。Eclipse可能没有那么多警告,但我不认为这是问题的原因。事实上,这是正确的结果,而不是您期望的结果。
int
是一个32位有符号值,如果您执行的计算太大,则只保留较低的32位。这在JLS中定义,因为它是大多数CPU的行为方式。这就是32=bitint
在C语言中的行为。我不知道你为jetbrains工作过!;-)(ps:netbeans没有给出任何警告…pfff)我使用Ecipse,因为它是java的IDE,我认为Eclipse应该像在命令行上一样编译代码。Eclipse可能没有那么多警告,但我不认为这是问题的原因。事实上,这是正确的结果,而不是您期望的结果。int
是一个32位有符号值,如果您执行的计算太大,则只保留较低的32位。这在JLS中定义,因为它是大多数CPU的行为方式。这是32=bitint
在C中的行为。我不确定问题是什么,但在第一种情况下,你乘以25,第二次乘以24。为什么?我想他是说加上24天不是问题,但加上25天是问题。时间乘以24是正常的,但当乘以25时,它就变成了错误的日期。我不确定问题是什么,但在第一种情况下,你乘以25,第二次乘以24。为什么?我想他是说加上24天不成问题,但加上25天就成了问题。时间乘以24是正常的,但当乘以25时,它就变成了错误的日期。