dku*_*rni 26 java date simpledateformat
背景:
在我的数据库表中,我有两个时间戳
timeStamp1 = 2011-08-23 14:57:26.662
timeStamp2 = 2011-08-23 14:57:26.9
Run Code Online (Sandbox Code Playgroud)
当我执行"ORDER BY TIMESTAMP ASC"时,timeStamp2被认为是更大的时间戳(这是正确的).
要求:我需要得到这些时间戳的差异(timeStamp2 - timeStamp1)
我的实施:
public static String timeDifference(String now, String prev) {
try {
final Date currentParsed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(now);
final Date previousParsed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(prev);
long difference = currentParsed.getTime() - previousParsed.getTime();
return "" + difference;
} catch (ParseException e) {
return "Unknown";
}
}
Run Code Online (Sandbox Code Playgroud)
答案应该是238毫秒,但返回的值是-653毫秒.我不确定我做错了什么.有什么建议?
Pet*_*rey 17
您正在解析的格式和格式使用不匹配.您期望三位数字段,并且只提供一位数字.它需要9并假设你的意思是009什么时候你想要的900.日期格式很复杂,当您以不同的格式证明日期时,它可能会以不同的方式对您进行解析.
文档说明S意味着毫秒数和该字段中的数字是9,因此它的行为正确.
编辑:这个例子可能会有所帮助
final SimpleDateFormat ss_SSS = new SimpleDateFormat("ss.SSS");
ss_SSS.setTimeZone(TimeZone.getTimeZone("GMT"));
for (String text : "0.9, 0.456, 0.123456".split(", ")) {
System.out.println(text + " parsed as \"ss.SSS\" is "
+ ss_SSS.parse(text).getTime() + " millis");
}
Run Code Online (Sandbox Code Playgroud)
版画
0.9 parsed as "ss.SSS" is 9 millis
0.456 parsed as "ss.SSS" is 456 millis
0.123456 parsed as "ss.SSS" is 123456 millis
Run Code Online (Sandbox Code Playgroud)
Tho*_*mas 12
我不完全确定,但JavaDoc说明了这一点:
对于解析,除非需要分隔两个相邻字段,否则将忽略模式字母的数量.
这表示毫秒2011-08-23 14:57:26.9将被解析为9而不是900.添加尾随零可能有效:2011-08-23 14:57:26.900.
| 归档时间: |
|
| 查看次数: |
50789 次 |
| 最近记录: |