在Java中如何说5秒钟?

我正在查看date文档,并试图弄清楚我现在如何expression+5秒。 这是一些伪代码:

import java.util.Date public class Main { public static void main(String args[]) { Date now = new Date(); now.setSeconds(now.getSeconds() + 5); } } 

date几乎完全不赞同,并且出于向下兼容性的原因仍然存在。 如果您需要设置特定date或进行date算术,请使用日历 :

 Calendar calendar = Calendar.getInstance(); // gets a calendar using the default time zone and locale. calendar.add(Calendar.SECOND, 5); System.out.println(calendar.getTime()); 

您可以使用:

 now.setTime(now.getTime() + 5000); 

Date.getTime()setTime()始终是指1970年1月1日上午12点以后的毫秒。

乔达时间

不过,如果您所做的不是最简单的date/时间处理,我强烈build议您使用Joda Time 。 这是一个比Java内置的支持更有用和更友好的库。

 DateTime later = DateTime.now().plusSeconds( 5 ); 

java.time

Joda-Time后来启发了Java 8中内置的新java.time包 。

从单线手段:

new Date( System.currentTimeMillis() + 5000L)

正如我从你的例子中所理解的那样,'现在'真的是'现在','System.currentTimeMillis()'恰好代表了'现在'的概念:-)

但是,对于一切比乔达时间API更复杂的事情。

正如其他人所指出的那样,在乔达中要容易得多:

 DateTime dt = new DateTime(); DateTime added = dt.plusSeconds(5); 

我强烈build议你迁移到乔达。 几乎所有与Java有关的date相关的问题都解决了Joda的build议:-) Joda API应该是新的标准JavadateAPI(JSR310)的基础,所以你将会转向一个新的标准。

无视Dates并专注于这个问题。

我的首选是使用java.util.concurrent.TimeUnit因为它增加了我的代码的清晰度。

在Java中,

 long now = System.currentTimeMillis(); 

now使用TimeUtil 5秒钟是:

 long nowPlus5Seconds = now + TimeUnit.SECONDS.toMillis(5); 

参考: http : //docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html

Pascal Thivent 的回答以及Jon Skeet 的回答都是正确和好的。 这是一些额外的信息。

五秒= PT5S (ISO 8601)

expression“五秒钟后”思想的另一种方式是使用由ISO 8601定义的标准格式的string。 持续时间/周期格式具有这种模式PnYnMnDTnHnMnS ,其中P标记开始并且T将date部分与时间部分分开。

所以五秒钟是PT5S

乔达时间

Joda-Time 2.8库可以生成和parsing这样的持续时间/周期string。 请参阅PeriodDurationInterval类别。 您可以在DateTime对象中添加或减去Period对象。

searchStackOverflow的许多例子和讨论。 这里有一个简单的例子。

 DateTimeZone zone = DateTimeZone.forID( "America/Montreal" ); DateTime now = DateTime.now( zone ); DateTime then = now.plusSeconds( 5 ); Interval interval = new Interval( now, then ); Period period = interval.toPeriod( ); DateTime thenAgain = now.plus( period ); 

转储到控制台。

 System.out.println( "zone: " + zone ); System.out.println( "From now: " + now + " to then: " + then ); System.out.println( "interval: " + interval ); System.out.println( "period: " + period ); System.out.println( "thenAgain: " + thenAgain ); 

运行时。

 zone: America/Montreal From now: 2015-06-15T19:38:21.242-04:00 to then: 2015-06-15T19:38:26.242-04:00 interval: 2015-06-15T19:38:21.242-04:00/2015-06-15T19:38:26.242-04:00 period: PT5S thenAgain: 2015-06-15T19:38:26.242-04:00 

我刚刚从java文档中find了这个

 import java.util.Calendar; public class Main { public static void main(String[] args) { Calendar now = Calendar.getInstance(); System.out.println("Current time : " + now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE) + ":" + now.get(Calendar.SECOND)); now.add(Calendar.SECOND, 100); System.out.println("New time after adding 100 seconds : " + now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE) + ":" + now.get(Calendar.SECOND)); } } 

有一个我应该知道的公约?

 public class datetime { public String CurrentDate() { java.util.Date dt = new java.util.Date(); java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currentTime = sdf.format(dt); return currentTime; } public static void main(String[] args) { class SayHello extends TimerTask { datetime thisObj = new datetime(); public void run() { String todaysdate = thisObj.CurrentDate(); System.out.println(todaysdate); } } Timer timer = new Timer(); timer.schedule(new SayHello(), 0, 5000); } } 
  String serverTimeSync = serverTimeFile.toString(); SimpleDateFormat serverTime = new SimpleDateFormat("yyyy,MM,dd,HH,mm,ss"); Calendar c = Calendar.getInstance(); c.setTime(serverTime.parse(serverTimeSync)); c.add(Calendar.MILLISECOND, 15000); serverTimeSync = serverTime.format(c.getTime());