yyyy的Java SimpleDateFormat格式问题

And*_*ner 4 java simpledateformat

我在使用formatSimpleDateFormat对象的方法时遇到问题.

有问题的代码是:

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(date);
Run Code Online (Sandbox Code Playgroud)

其中"date"是使用Calendar.getTimeInMillis()中的long int创建的Date对象;

Calendar cal = Calendar.getInstance();
Date date = new Date(cal.getTimeInMillis());
Run Code Online (Sandbox Code Playgroud)

一切都工作正常,除了字符串的年份部分.当我传递日期时,输出的字符串如下所示:

0044-09-10 05:30:24 
Run Code Online (Sandbox Code Playgroud)

传递的日期对象是从返回的长整数创建的:

Calendar.getTimeInMillis();
Run Code Online (Sandbox Code Playgroud)

我相信从这个方法返回的数字是从1月1日开始的毫秒数.1970年,我认为是问题所在,但即使我在1970年增加了毫秒数(大声笑,可能是错误的事情,但值得一试:P),它仍然在0044中解析年份.

我已经做了很多谷歌搜索,所有似乎都指向传递给SimpleDateFormat构造函数的字符串中的简单问题,所以我在这里不知所措.

任何帮助是极大的赞赏.

如果需要任何其他信息,请告诉我,我会尽力提供.

再次感谢!

编辑:

我想我会更多地解释一下背景:

技术人员将进行呼叫,并在到达站点时将呼叫标记为"已启动".然后,应用程序将创建一个Calendar实例并保存从中返回的long int Calendar.getTimeInMillis().

当技术人员完成呼叫时,他/她将呼叫标记为"完成".同样,Calendar创建一个实例并Calendar.getTimeInMillis()保存返回的long int .

这允许简单的"呼叫持续时间"计算.

现在,当使用技术人员在应用程序中使用的结束表单时,在调用期间保存的长整数将传递给Date对象,然后将其传递给SimpleDateFormat.format()方法.

这就是问题出现的地方.再次感谢,希望这有帮助.

Mad*_*mer 7

要计算日期/时间之间的持续时间,不要依赖减去毫秒,这是非常不可靠的.

如果您使用的是Java 8,则应该利用新的java.timeAPI,例如......

LocalDateTime dt1 = LocalDateTime.of(2014, 9, 11, 10, 0);
LocalDateTime dt2 = LocalDateTime.of(2014, 9, 11, 12, 0);

Duration duration = Duration.between(dt1, dt2);
System.out.println(duration.toDays());
System.out.println(duration.toHours());
System.out.println(duration.toMinutes());
System.out.println(duration.getSeconds());
Run Code Online (Sandbox Code Playgroud)

哪个输出......

0
2
120
7200
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看期间和持续时间.

或者,您可以使用JodaTime(java.time基于此)