为日期添加秒数

时间:2014-05-08 17:30:07

标签: java

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

Date startTime = dayStart(dateSelected);    
startTime.setSeconds(startTime.getSeconds()+30);

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

此行的多个标记

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

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

5 个答案:

答案 0 :(得分:5)

Date类的

JavaDoc读取

  

从JDK 1.1开始,应该使用Calendar类进行转换   应该使用日期和时间字段以及DateFormat类   格式化和解析日期字符串。 Date中的相应方法是   弃用。

JavaDoc中的setSeconds方法有以下警告

  

已过时。从JDK 1.1版开始,替换为   Calendar.set(Calendar.SECOND,int seconds)。

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

int numberOfseconds = 30;
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateSelected);
calendar.add(Calendar.SECOND, numberOfSeconds);

答案 1 :(得分:3)

import java.util.Date;
import java.util.Calendar;

public class DateStuff {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        Date now = cal.getTime();

        cal.add(Calendar.SECOND, 30);
        Date later = cal.getTime();

        System.out.println("Now: " + now);
        System.out.println("Later: " + later);
    }
}

答案 2 :(得分:2)

Date上的方法已被弃用。
Calendar类:

    Date oldDate = new Date();
    Calendar gcal = new GregorianCalendar();
    gcal.setTime(oldDate);
    gcal.add(Calendar.SECOND, 30);
    Date newDate = gcal.getTime();

答案 3 :(得分:1)

tl; dr

  

不获取这些已过时的警报的更好方法是什么?

请勿使用该可怕的课程java.util.Date。使用其替换Instant

myJavaUtilDate.toInstant().plusSeconds( 30 ) 

java.time

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

Table of date-time types in Java, both modern and legacy

一天的开始

  

Date startTime = dayStart(dateSelected);

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

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalDate localDate = LocalDate.now( z ) ;  // Get the current date as seen in a particular time zone.

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

ZonedDateTime zdt = localDate.atStartOfDay( z ) ;

日期时间数学

您可以通过调用plus…minus…方法来执行日期时间数学。

使用DurationPeriod类指定未附加到时间线上的时间跨度。

Duration d = Duration.ofSeconds( 30 ) ;

添加。

ZonedDateTime zdtLater = zdt.plus( d ) ;

或将这两行合并为1。

ZonedDateTime zdtLater = zdt.plusSeconds( 30 ) ;

转换

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

java.util.Date旧式类表示UTC中的时刻,分辨率为毫秒。替换为java.time.Instant,也是UTC的一刻,但分辨率要高得多(纳秒)。

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

Instant instant = zdtLater.toInstant() ;

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

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

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

答案 4 :(得分:0)

向旧的 java.util.Date 添加 30 秒(不推荐但有时有用):

Date startTime = dayStart(dateSelected);    
startTime = new Date(startTime.getTime() + 30 * 1000);