【发布时间】:2014-09-10 23:38:04
【问题描述】:
我在使用 SimpleDateFormat 对象的 format 方法时遇到问题。
有问题的代码是:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(date);
其中“日期”是使用 Calendar.getTimeInMillis() 中的 long int 创建的 Date 对象;
Calendar cal = Calendar.getInstance();
Date date = new Date(cal.getTimeInMillis());
除了字符串的年份部分外,一切正常。当我传递日期时,输出的字符串如下所示:
0044-09-10 05:30:24
传递的日期对象是从返回的长整数创建的:
Calendar.getTimeInMillis();
我相信从这个方法返回的数字是从 1 月 1 日开始计算的毫秒数。 1970 年,我认为这是问题所在,但即使我加上 1970 年的毫秒数(哈哈,可能是错误的做法,但值得一试:P),它仍然解析为 0044年部分。
我已经进行了无数次谷歌搜索,似乎都在传递给 SimpleDateFormat 构造函数的字符串中指出了简单的问题,所以我在这里不知所措。
非常感谢任何帮助。
如果需要任何其他信息,请告诉我,我会尽力提供。
再次感谢!
编辑:
我想我会多解释一下上下文:
技术人员将拨打电话,并在到达现场后将电话标记为“已开始”。
然后应用程序将创建一个Calendar 实例并保存从Calendar.getTimeInMillis() 返回的long int。
当技术人员完成通话后,他/她会将通话标记为“完成”。再次创建一个Calendar 实例,并保存从Calendar.getTimeInMillis() 返回的long int。
这样可以轻松计算“通话时长”。
现在,当使用技术人员在应用程序中使用的结束表单时,调用期间保存的长整数将传递给 Date 对象,然后将其传递给 SimpleDateFormat.format() 方法。
这就是问题出现的地方。再次感谢,希望对您有所帮助。
【问题讨论】:
-
尝试使用返回 Date 对象的 Calendar#getTime,尝试比较返回的 Date 和 Calendar#getTimeMillis 方法的毫秒数
-
如果您使用的是 java 8,请使用新的 Time API,否则,请使用 JodaTine,它们会更好地计算持续时间,然后彼此减去毫秒
-
从 Calendar.getInstance() 返回的类的名称是什么?
-
您的代码在我的机器上运行良好。您系统上的当前日期/时间是什么?
-
您使用的是什么版本的 Java?
标签: java simpledateformat