为日期添加秒数

Hel*_*zen 8 java

我需要在几秒钟内为我的日期添加一定的时间.为此,我正在制作它:

Date startTime = dayStart(dateSelected);    
startTime.setSeconds(startTime.getSeconds()+30);
Run Code Online (Sandbox Code Playgroud)

但是,通过这种方式,我得到这个警报:

此行中的多个标记

- 不推荐使用Date类型的方法setSeconds(int)
- 不推荐使用Date类型的方法getSeconds()

没有获得这些已弃用的警报的更好方法是什么?

Bas*_*que 8

太长了;博士

\n\n
\n

避免收到这些已弃用警报的更好方法是什么?

\n
\n\n

不要使用那个可怕的类,java.util.Date. 使用它的替代品,Instant.

\n\n
myJavaUtilDate.toInstant().plusSeconds( 30 ) \n
Run Code Online (Sandbox Code Playgroud)\n\n

java.time

\n\n

现代方法使用JSR 310 中定义的java.time类,它取代了可怕的遗留日期时间类,例如CalendarDate

\n\n

Java 中的日期时间类型表(现代和传统)

\n\n

一天的开始

\n\n
\n

日期开始时间 = dayStart(dateSelected);

\n
\n\n

如果您想要一天中的第一时刻,则需要LocalDate(日期)和ZoneId(时区)。

\n\n
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;\nLocalDate localDate = LocalDate.now( z ) ;  // Get the current date as seen in a particular time zone.\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取该日期的开始时间。指定时区以获取ZonedDateTime. 始终让java.time确定一天中的第一个时刻。某些区域的某些日期不是00:00:00 开始。它们可能会在其他时间开始,例如 01:00:00。

\n\n
ZonedDateTime zdt = localDate.atStartOfDay( z ) ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

日期时间数学

\n\n

plus\xe2\x80\xa6您可以通过调用&方法来执行日期时间数学运算minus\xe2\x80\xa6

\n\n

Duration使用或类指定未附加到时间线的时间跨度Period

\n\n
Duration d = Duration.ofSeconds( 30 ) ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

添加。

\n\n
ZonedDateTime zdtLater = zdt.plus( d ) ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者将这 2 行合并为 1 行。

\n\n
ZonedDateTime zdtLater = zdt.plusSeconds( 30 ) ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

转换

\n\n

如果您需要与尚未更新到java.time的旧代码进行互操作,请调用添加到旧类中的新转换方法。

\n\n

java.util.Date类表示 UTC 中的某个时刻,分辨率为毫秒。它的替代品是java.time.Instant,也是 UTC 中的一个时刻,但具有更精细的纳秒分辨率。

\n\n

Instant您可以从 a 中提取 a ZonedDateTime,有效地从某个时区调整为 UTC。同一时刻,时间轴上的同一点,不同的挂钟时间。

\n\n
Instant instant = zdtLater.toInstant() ;\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

关于java.time

\n\n

java.time框架内置于 Java 8 及更高版本中这些类取代了麻烦的旧遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat

\n\n

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

\n\n

Joda -Time项目现在处于维护模式,建议迁移到java.time类。

\n\n

您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC 驱动程序。不需要字符串,不需要类。java.sql.*

\n\n

从哪里获取 java.time 类?

\n\n\n\n

ThreeTen -Extra项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval、、、等等。YearWeekYearQuarter

\n


akh*_*ess 7

用于Date类的JavaDoc读取

从JDK 1.1开始,Calendar类应该用于在日期和时间字段之间进行转换,而DateFormat类应该用于格式化和解析日期字符串.不推荐使用Date中的相应方法.

setSeconds在JavaDoc的方法有以下警告

已过时.从JDK 1.1版开始,由Calendar.set(Calendar.SECOND,int seconds)取代.

这意味着你应该做这样的事情

int numberOfseconds = 30;
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateSelected);
calendar.add(Calendar.SECOND, numberOfSeconds);
Run Code Online (Sandbox Code Playgroud)