我正在查看日期文档,并试图找出我如何表达NOW + 5秒.这是一些伪代码:
import java.util.Date
public class Main {
public static void main(String args[]) {
Date now = new Date();
now.setSeconds(now.getSeconds() + 5);
}
}
Run Code Online (Sandbox Code Playgroud)
Pas*_*ent 81
日期几乎完全弃用,并且由于向后兼容性原因仍然存在.如果您需要设置特定日期或进行日期算术,请使用日历:
Calendar calendar = Calendar.getInstance(); // gets a calendar using the default time zone and locale.
calendar.add(Calendar.SECOND, 5);
System.out.println(calendar.getTime());
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 52
您可以使用:
now.setTime(now.getTime() + 5000);
Run Code Online (Sandbox Code Playgroud)
Date.getTime()
并且setTime()
总是指自1970年1月1日上午12点UTC以来的毫秒数.
但是,如果你做的不仅仅是最简单的日期/时间处理,我强烈建议你使用Joda Time.这是一个很多更强大和友好的库比在Java中内置支持.
DateTime later = DateTime.now().plusSeconds( 5 );
Run Code Online (Sandbox Code Playgroud)
Joda-Time后来启发了Java 8中内置的新java.time包.
小智 23
从单线 - hacky dep.:
new Date( System.currentTimeMillis() + 5000L)
正如我从你的例子中所理解的那样,'now'实际上是'现在',并且"System.currentTimeMillis()'碰巧代表了同样的'现在'概念:-)
但是,是的,对于比Joda时间API更复杂的一切.
Bas*_*que 14
Instant // Use modern `java.time.Instant` class to represent a moment in UTC.
.now() // Capture the current moment in UTC.
.plusSeconds( 5 ) // Add five seconds into the future. Returns another `Instant` object per the Immutable Objects pattern.
Run Code Online (Sandbox Code Playgroud)
使用多年前取代了可怕的&类的现代java.time类。Date
Calendar
要在 UTC 中工作,请使用Instant
.
Instant later = Instant.now().plusSeconds( 5 ) ;
Run Code Online (Sandbox Code Playgroud)
要在特定时区工作,请使用ZonedDateTime
.
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime later = ZonedDateTime.now( z ).pluSeconds( 5 ) ;
Run Code Online (Sandbox Code Playgroud)
Duration
您可以对要添加的时间量和粒度进行软编码。使用Duration
类。
Duration d = Duration.ofSeconds( 5 ) ;
Instant later = Instant.now().plus( d ) ; // Soft-code the amount of time to add or subtract.
Run Code Online (Sandbox Code Playgroud)
该java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date
, Calendar
, & SimpleDateFormat
。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
您可以直接与您的数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC 驱动程序。不需要字符串,不需要类。Hibernate 5 & JPA 2.2 支持java.time。java.sql.*
从哪里获得 java.time 类?
正如其他人所指出的,在Joda中它更容易:
DateTime dt = new DateTime();
DateTime added = dt.plusSeconds(5);
Run Code Online (Sandbox Code Playgroud)
我强烈建议你迁移到Joda.几乎所有关于SO的Java日期相关问题都解决了Joda建议:-) Joda API应该是新标准Java date API(JSR310)的基础,因此您将迁移到新标准.
忽视Dates
并专注于这个问题.
我的偏好是使用,java.util.concurrent.TimeUnit
因为它增加了我的代码的清晰度.
在Java中
long now = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
从5秒now
使用TimeUtil
为:
long nowPlus5Seconds = now + TimeUnit.SECONDS.toMillis(5);
Run Code Online (Sandbox Code Playgroud)
参考:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html
归档时间: |
|
查看次数: |
81258 次 |
最近记录: |