我正在尝试将格式为“201110250830”(yyyyMMddhhmm)的字符串时间戳转换为毫秒(长)。我正在使用以下代码:
Calendar t = Calendar.getInstance();
t.set(Integer.parseInt(ts.substring(0,4)),
Integer.parseInt(ts.substring(4,6)) - 1, // month is 0 based!
Integer.parseInt(ts.substring(6,8)),
Integer.parseInt(ts.substring(8,10)),
Integer.parseInt(ts.substring(10,12)),
0);
return t.getTimeInMillis();
然而,我有时候会有几毫秒的差异。例如:
long t1 = timestampToLong("201110250830");
long t2 = timestampToLong("201110250831");
assertEquals(60*1000, t2 - t1);
有时给了我:
Got exception: java.lang.AssertionError: expected:<60000> but was:<60001>
我检查了文档,但找不到任何相关内容。任何的想法? (看起来像是美好的一天,我将在这里学到一些东西!: - )
谢谢!
答案 0 :(得分:5)
在致电t.clear()
之前致电set()
。
欢迎来到Java时间/日期处理的世界。
答案 1 :(得分:4)
你可以像这样使用DateFormat。
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
Date ins = df.parse("201110250830");
long ts = ins.getTime();