我尝试使用SimpleDateFormat
格式化时间戳,并尝试使用相同的格式来解析这样的格式化日期:
SimpleDateFormat sdf = new SimpleDateFormat("MMM d, YYYY 'at' hh:mma z");
GregorianCalendar cal = new GregorianCalendar(Locale.US);
sdf.setTimeZone(cal.getTimeZone())
sdf.parse(sdf.format(1435271907000L)).getTime() == 1435271907000L
最后一个表达式为false,实际结果为1419806280000L
那么如何实现对称的dateTimeFormat解析/格式化行为呢?
答案 0 :(得分:1)
首先,您的格式模式中没有秒数,因此您的日期秒将初始化为0.其次:YYYY
is different from yyyy
。
将ss
添加到您的模式中,并将YYYY
更改为yyyy
。
SimpleDateFormat sdf = new SimpleDateFormat("MMM d ss, yyyy 'at' hh:mma z");
String f = sdf.format(1435271907000L);
Date d = sdf.parse(f);
System.out.println(d.getTime() == 1435271907000L);
请注意,它还会打印false
时间,以毫秒为单位> 0(例如1435271907001L
)。如果您需要毫秒精度,那么您还需要为模式添加毫秒SSS
。
SimpleDateFormat sdf = new SimpleDateFormat("MMM d ss SSS, yyyy 'at' hh:mma z");
答案 1 :(得分:0)
通过纠正MMM和HH的案例来尝试这个,
SimpleDateFormat sdf = new SimpleDateFormat("MMM d, yyyy 'at' HH:mm:ss.a`Z`");
GregorianCalendar cal = new GregorianCalendar(Locale.US);
sdf.setTimeZone(cal.getTimeZone())
sdf.parse(sdf.format(1435271907000L)).getTime() == 1435271907000L
我希望这会奏效。