在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。 请参阅Period
, Duration
和Interval
类别。 您可以在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());