我有以下代码片段:
DateTime dateTime = new DateTime().withZone(DateTimeZone.forID("America/Chicago"))
.withYear(2016)
.withMonthOfYear(8)
.withDayOfMonth(25)
.withHourOfDay(12)
.withMinuteOfHour(37);
System.out.println("DateTime: ");
System.out.println(dateTime.toDate().getTime());
String str = "2016-8-25 12:37 AM CST";
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-M-dd hh:mm a z");
System.out.println("SDF: ");
try {
System.out.println(sdf.parse(str).getTime()+"");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
根据我的理解,两者都代表相同的日期(因此时代也应该相同)。但是我得到的结果是:
DateTime:
1472146669119
SDF:
1451198220000
如果我将时区更改为CDT,那么我得到:
DateTime:
1472146668746
SDF:
1451194620000
所以我希望有一个善良的灵魂会启发我(帮助这个可怜的灵魂)。
由于
更新
我使用以下修改后的代码:
DateTime dateTime = new DateTime(2016, 8, 25, 12, 37, DateTimeZone.forID("America/Chicago"));
System.out.println("DateTime: ");
System.out.println(dateTime.toDate().getTime());
String str = "2016-8-25 12:37 AM CDT";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm a z");
System.out.println("SDF: ");
try {
System.out.println(sdf.parse(str).getTime()+"");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
现在我得到了:
DateTime:
1472146620000
SDF:
1472103420000
答案 0 :(得分:0)
下面:
System.out.println(sdf.parse(str).getTime()+"");
您正在使用格式化的字符串,该字符串不包含秒数,并将其解析为日期。关于它的第二个丢失的信息,所以时间四舍五入到:12:37:00。
答案 1 :(得分:0)
在你发布的第二段代码中,这个日期/时间:
new DateTime(2016, 8, 25, 12, 37, DateTimeZone.forID("America/Chicago"));
// ^ - midday
...是2016年8月25日中午后37分钟。
这个日期:
String str = "2016-8-25 12:37 AM CDT";
...是2016年8月25日午夜后的37分钟。
对于匹配的日期,我希望第一个应该是:
new DateTime(2016, 8, 25, 0, 37, DateTimeZone.forID("America/Chicago"));
// ^ - midnight