我想在当前时间增加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
这意味着什么。忽略这个警告是否安全?如果不是那么如何处理呢?
答案 0 :(得分:3)
deprecated
意味着不应再使用此方法,因为它可以从Java语言中删除而支持其他一些方法(它可能不会被删除,但它不是更好的做事方式了)。 Documentation建议您使用Calendar.get(Calendar.SECOND)
,这是您应在代码中使用的内容。
请注意,从Java 8开始,您可以再次使用LocalDateTime#getSecond
方法。
答案 1 :(得分:2)
您可以使用date.setTime(date.getTime() + 5000)
答案 2 :(得分:2)
显示已弃用的警告,表示 在java中有一些更好的方式可以这样做。
答案 3 :(得分:2)
Java 8 具有完全不同的time-api,使处理日期变得更加容易。 Here's an article
使用 Java版本5-7 (以下所有内容不应使用恕我直言),您应该使用日历(as Petr suggested) 如果您被允许使用第三方API,您应该明确地查看JodaTime
答案 4 :(得分:2)
你可以试试这个。日历是您正在寻找的最佳解决方案。
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());
Out put:
Thu Apr 17 14:53:20 IST 2014
答案 5 :(得分:1)
建议以后访问此页面的访问者使用 java.time API。 java.util
的日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API。
当地时间:
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
对时间线上的单个瞬时点进行建模,并且与时区无关。它是最常用的函数,toEpochMilli
和 ofEpochMilli
用于将瞬间转换为 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);
}
}
从 Trail: Date Time 了解有关现代日期时间 API 的更多信息。
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
对象不是像 modern date-time types 那样的真实日期时间对象;相反,它表示从 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 和现代 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);
答案 6 :(得分:0)
仅供参考,以下是使用Joda-Time 2.3的示例代码。捆绑的java.util.Date和.Calendar类非常麻烦,应该避免使用。
与java.util.Date不同,Joda-Time DateTime对象具有指定的时区。
指定时区时,请使用proper time zone name。避免使用三个或四个字母代码,因为它们既不标准也不唯一。
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
答案 7 :(得分:0)
一种简单的方法是使用apache DateUtils
。
import org.apache.commons.lang.time.DateUtils;
DateUtils.addSeconds(now, 5); // Add 5 seconds.
DateUtils.addSeconds(now, -5); // Subtracting 5 seconds
您还可以添加/减去分钟,小时等等...