从 Java 日期中添加/减去 5 秒 - 显示已弃用警告



我想在当前时间上增加 5 秒

    Date date = new Date();
    date.setSeconds(date.getSeconds()+ 5);
    System.out.println("old Value is: "+date);
    System.out.println("New Value is: "+ date);

它生成的正确输出正是我需要的:

Old Value is: Thu Apr 17 14:10:33 PKT 2014
New Value is: Thu Apr 17 14:10:38 PKT 2014

但它给了我一条警告错误消息,因为

Multiple markers at this line
    - The method getSeconds() from the type Date is deprecated
    - The method setSeconds(int) from the type Date is 
     deprecated

这意味着什么。忽略此警告是否安全?如果没有,那么如何处理呢?

您可以使用date.setTime(date.getTime() + 5000)<</p>

div class="one_answers">

你可以试试这个。日历是您正在寻找的最佳解决方案。

Date date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                                             .parse("2014-04-17 14:53:25");
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.SECOND,(calendar.get(Calendar.SECOND)-5));
System.out.println(calendar.getTime());

输出:

Thu Apr 17 14:53:20 IST 2014

deprecated意味着不应该再使用此方法,因为它可以从 Java 语言中删除,以支持其他方法(它可能不会被删除,但它不再是更可取的做事方式(。文档建议你使用Calendar.get(Calendar.SECOND)这是你应该在代码中使用的。

请注意,从 Java 8 开始,您可以再次使用LocalDateTime#getSecond方法。

Java 8 具有完全不同的时间 api,并且使处理日期变得更加容易。这是一篇文章

对于Java版本5-7(恕我直言,以下所有内容都不应使用(,您应该使用日历(如Petr建议的那样(如果您被允许使用第三方API,您应该明确查看JodaTime

显示已弃用的警告,这意味着Java中有一些更好的方法可以做到这一点。

java.time

建议此页面的未来访问者使用 java.time API。java.util的日期时间 API 及其格式化 API SimpleDateFormat已过时且容易出错。建议完全停止使用它们并切换到现代日期时间 API。

  • 出于任何原因,如果你必须坚持使用 Java 6 或 Java 7,你可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。
  • 如果您正在为 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请查看通过脱糖提供的 Java 8+ API 和如何在 Android Project 中使用 ThreeTenABP。

当地时间:

import java.time.LocalTime;
import java.time.ZoneId;
public class Main {
    public static void main(String[] args) {
        // ZoneId.systemDefault() returns the time-zone of JVM. Change it as per your
        // requirement e.g. to ZoneId.of("Europe/London")
        LocalTime localTimeNow = LocalTime.now(ZoneId.systemDefault());
        System.out.println(localTimeNow);
        // After 5 seconds
        LocalTime localTimeAfter5Sec = localTimeNow.plusSeconds(5);
        System.out.println(localTimeAfter5Sec);
    }
}

当地日期和时间:

import java.time.LocalDateTime;
import java.time.ZoneId;
public class Main {
    public static void main(String[] args) {
        // ZoneId.systemDefault() returns the time-zone of JVM. Change it as per your
        // requirement e.g. to ZoneId.of("Europe/London")
        LocalDateTime ldtNow = LocalDateTime.now(ZoneId.systemDefault());
        System.out.println(ldtNow);
        // After 5 seconds
        LocalDateTime ldtAfter5Sec = ldtNow.plusSeconds(5);
        System.out.println(ldtAfter5Sec);
    }
}

日期和时间与时区:

import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
    public static void main(String[] args) {
        // ZoneId.systemDefault() returns the time-zone of JVM. Change it as per your
        // requirement e.g. to ZoneId.of("Europe/London")
        ZonedDateTime zdtNow = ZonedDateTime.now(ZoneId.systemDefault());
        System.out.println(zdtNow);
        // After 5 seconds
        ZonedDateTime zdtAfter5Sec = zdtNow.plusSeconds(5);
        System.out.println(zdtAfter5Sec);
    }
}

时间线上的瞬时点:

java.time.Instant对时间线上的单个瞬时点进行建模,并且与时区无关。它是最常用的函数,toEpochMilliofEpochMilli 分别用于将瞬间转换为从 1970-01-01T00:00:00Z 纪元的毫秒数,以及从 1970-01-01T00:00:00Z 纪元到瞬间的毫秒数。请注意,Z代表Zulu,表示UTC+00:00

import java.time.Instant;
public class Main {
    public static void main(String[] args) {
        // This moment
        Instant now = Instant.now();
        System.out.println(now);
        // Moment after 5 sec
        Instant momentAfter5Sec = now.plusSeconds(5);
        System.out.println(momentAfter5Sec);
    }
}

要了解有关现代日期时间 API 的更多信息,请参阅跟踪:日期时间

乔达时间

摘自Joda-Time主页

Joda-Time 是 Java 事实上的标准日期和时间库在 Java SE 8 之前。现在要求用户迁移到 java.time(JSR-310(。

当地时间:

import org.joda.time.DateTimeZone;
import org.joda.time.LocalTime;
public class Main {
    public static void main(String[] args) {
        // DateTimeZone.getDefault() returns the time-zone of JVM. Change it as per your
        // requirement e.g. to DateTimeZone.forID("Europe/London")
        LocalTime localTimeNow = LocalTime.now(DateTimeZone.getDefault());
        System.out.println(localTimeNow);
        // After 5 seconds
        LocalTime localTimeAfter5Sec = localTimeNow.plusSeconds(5);
        System.out.println(localTimeAfter5Sec);
    }
}

当地日期和时间:

import org.joda.time.DateTimeZone;
import org.joda.time.LocalDateTime;
public class Main {
    public static void main(String[] args) {
        // DateTimeZone.getDefault() returns the time-zone of JVM. Change it as per your
        // requirement e.g. to DateTimeZone.forID("Europe/London")
        LocalDateTime ldtNow = LocalDateTime.now(DateTimeZone.getDefault());
        System.out.println(ldtNow);
        // After 5 seconds
        LocalDateTime ldtAfter5Sec = ldtNow.plusSeconds(5);
        System.out.println(ldtAfter5Sec);
    }
}

日期和时间与时区:

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
public class Main {
    public static void main(String[] args) {
        // DateTimeZone.getDefault() returns the time-zone of JVM. Change it as per your
        // requirement e.g. to DateTimeZone.forID("Europe/London")
        DateTime dtNow = new DateTime(DateTimeZone.getDefault());
        System.out.println(dtNow);
        // After 5 seconds
        DateTime dtAfter5Sec = dtNow.plusSeconds(5);
        System.out.println(dtAfter5Sec);
    }
}

时间线上的瞬时点:

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
public class Main {
    public static void main(String[] args) {
        DateTime now = new DateTime(DateTimeZone.UTC);
        System.out.println(now);
        // After 5 seconds
        DateTime after5Sec = now.plusSeconds(5);
        System.out.println(after5Sec);
    }
}

旧版 API:

java.util.Date对象不像现代日期时间类型那样是真正的日期时间对象;相反,它表示Epoch of January 1, 1970的毫秒数。打印 java.util.Date 的对象时,其 toString 方法返回从此毫秒值计算的日期时间。由于java.util.Date没有时区信息,因此它会应用 JVM 的时区并显示相同的时区。如果需要以不同的时区打印日期时间,则需要将时区设置为 SimpleDateFomrat 并从中获取格式化字符串。

import java.util.Calendar;
public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime());
        calendar.add(Calendar.SECOND, 5);// -5 if you want to subtract
        System.out.println(calendar.getTime());
    }
}

java.time.Instant作为遗留和现代API之间的桥梁:

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();
        Instant instant = date.toInstant();
        // Now you can convert instant to other types of java.time e.g.
        ZonedDateTime zdt = instant.atZone(ZoneId.of("Asia/Dubai"));
        System.out.println(zdt);
    }
}

无论出于何种目的,如果要将instant转换为java.util.Date对象:

Date dateTime = Date.from(instant);

最简单的解决方案:

如果是当前日期,请使用:

Long seconds= 10; //update in seconds 
//seconds*1000 to convert second to millisecond
Date dateAfterUpdation = new Date(System.currentTimeMillis() - (seconds*1000) );

对于特定日期:

Long seconds= 10;   //update in seconds
//seconds*1000 to convert second to millisecond
Date dateAfterUpdation = new Date(oldDate.getTime() - (seconds*1000) ); 

同样,您可以通过此技巧添加或减去任何时间量。

仅供参考,这里有一些使用 Joda-Time 2.3 的示例代码。捆绑的java.util.Date和.日历课是出了名的麻烦,应该避免。

与java.util.Date不同,Joda-Time DateTime对象具有指定的时区。

指定时区时,请使用正确的时区名称。避免使用三个或四个字母的代码,因为它们既不是标准化的也不是唯一的。

java.util.Date date = new java.util.Date(); // Has no time zone. Misnamed, as it contains both a date and a time portions.
DateTimeZone timeZone = DateTimeZone.forID( "Asia/Karachi" );
DateTime dateTime = new DateTime( date, timeZone );
DateTime dateTimeUtc = dateTime.withZone( DateTimeZone.UTC );
DateTime fiveSecondsAgo = dateTime.minusSeconds( 5 );
java.util.Date date2 = fiveSecondsAgo.toDate();

转储到控制台...

System.out.println( "date: " + date );
System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "fiveSecondsAgo: " + fiveSecondsAgo );
System.out.println( "date2: " + date2 );

运行时...

date: Thu Apr 17 14:44:01 PDT 2014
dateTime: 2014-04-18T02:44:01.773+05:00
dateTimeUtc: 2014-04-17T21:44:01.773Z
fiveSecondsAgo: 2014-04-18T02:43:56.773+05:00
date2: Thu Apr 17 14:43:56 PDT 2014

一个简单的方法是使用apache DateUtils

import org.apache.commons.lang.time.DateUtils;
DateUtils.addSeconds(now, 5); // Add 5 seconds.
DateUtils.addSeconds(now, -5); // Subtracting 5 seconds

您还可以添加/减去分钟、小时等...

相关内容

  • 没有找到相关文章

最新更新