日期字符串不是correnct

问题描述:

也许会有简单快速的答案,但我仍然无法找出原因是日期字符串不是correnct

Date date = new Date(60000); //one min. 
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
String dateStr = dateFormat.format(date); 

dateStr结果 - 一点01分00秒 还有一种多小时。时区?我如何在没有它的情况下进行设置?谢谢。

+0

你想要的结果是什么? – codeMagic 2013-03-04 23:23:11

+0

预计的结果是00:01:00。 – vlkpo 2013-03-04 23:30:35

Date代表一个特定的时刻,而不是一个持续时间。 new Date(60000)不会创建“一分钟”。请参阅docs for that constructor

使用指定的毫秒值初始化此Date实例。该值是1970年1月1日以来的毫秒数。

如果你想“从现在开始一分钟”,你可能会想使用Calendar类代替,特别是add方法。

更新:

DateUtils有一些有用的方法,你可能会发现有用。如果您希望以HH:mm:ss格式显示已用时间,则可以尝试DateUtils.formatElapsedTime。例如:

String dateStr = DateUtils.formatElapsedTime(60); 

请注意,60是以秒为单位。

+0

谢谢。我如何显示两个日期之间的差异?可以说date1.getTime() - date2.getTime()= 60000.我想显示它。 diffTimeStr =(新的SimpleDateFormat(“HH:mm:ss”))。格式(60000); diffTimeStr是“01:01:00为什么?又一次多一小时 – vlkpo 2013-03-04 23:32:49

+0

@vlkpo java很快就会获得新的apis,但暂时我建议使用joda时间库:http://joda-time.sourceforge.net /key_duration.html – kritzikratzi 2013-03-04 23:53:13

+0

@vlkpo再次,“日期”不是持续时间......我已更新我的答案,以包含看起来与您所寻找的内容更加接近的内容 – kabuko 2013-03-05 00:51:24

我建议使用TIMEUNIT

“TimeUnit表示粒度的一个给定的单位时间段,并提供实用的方法进行跨单元转换,和在这些单元中执行的定时和延迟操作。TimeUnit不保持时间信息,但仅有助于组织和使用时间表示,这些时间表示可以在各种情况下单独维护。纳秒被定义为千分之一微秒,微秒千分之一毫秒,千分之一千分之一秒,一分钟六十秒,一小时六十分钟,一天二十四小时。“

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html

Date date = new Date(); // getting actual date 
date = new Date (d.getTime() + TimeUnit.MINUTES.toMillis(1)); // adding one minute to the date 

三种方式使用java.util.Date指定一个分:

1.使用SimpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"))shahtapa说:

Date date = new Date(60*1000); //one min.  
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
String dateStr = dateFormat.format(date); 
System.out.println("Result = " + dateStr); //Result should be 00:01:00 

2ü唱java.util.Calendarkabuko说:

Calendar calendar = Calendar.getInstance(); 
calendar.clear(); 
calendar.set(Calendar.MINUTE,1); //one min. 
Date date = calendar.getTime(); 
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
String dateStr = dateFormat.format(date); 
System.out.println("Result = " + dateStr); //Result should be 00:01:00 

其他calendar.set()语句也可以使用:

calendar.set(Calendar.MILLISECOND,60*1000); //one min. 
calendar.set(1970,0,1,0,1,0);    //one min. 

3。使用这些setTimeZoneCalendar的想法,并迫使Calendar UTC时区 Simon Nickerson说:

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
calendar.clear(); 
calendar.set(Calendar.MINUTE,1); //one min. 
Date date = calendar.getTime(); 
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
String dateStr = dateFormat.format(date); 
System.out.println("Result = " + dateStr); //Result should be 00:01:00 

注:
我有一个类似的问题:日期1970-01-01在我的情况下是-3 600 000毫秒(1小时后)
java.util.Date(70,0,1).getTime() -> -3600000