如何解决如何使用当前日期作为输入使用java获取下一个日期
根据我的需要,鉴于我有当前日期,我必须将日期更新到第二天
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
sdf.setTimeZone(TimeZone.getTimeZone("GMT-4:00"));
return sdf.format(new Date());
System.out.println(Integer.parseInt(getorderDate())+1);
我收到此错误
java.lang.NumberFormatException: For input string: "2020-01-06T09:46:29-0400
谁能帮忙告诉我。
解决方法
java.util
的日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API。
- 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。
- 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。
如果您正在获取 java.util.Date
的对象,请将其转换为 java.time.Instant
,然后通过应用所需的区域偏移量从中获取 OffsetDateTime
。最后,使用 OffsetDateTime#plusDays
获取另一个添加了所需天数的实例。
演示:
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.Calendar;
import java.util.Date;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(202,6,9,46,29);
System.out.println(getNextDate(calendar.getTime()));
}
public static OffsetDateTime getNextDate(Date date) {
return date.toInstant().atOffset(ZoneOffset.of("-04:00")).plusDays(1);
}
}
输出:
0202-01-07T05:46:29.946-04:00
从 Trail: Date Time 了解现代日期时间 API。
,您必须添加设置日期的日期:
return sdf.format(new Date());
为此,您可以使用如下方法:
public String getOrderDate(Integer daysToAdd) {
// Date computation
Calendar c = Calendar.getInstance();
c.setTime(new Date());
if(daysToAdd!=null) {
c.add(Calendar.DATE,daysToAdd);
}
// Date formatting
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
sdf.setTimeZone(TimeZone.getTimeZone("GMT-4:00"));
return sdf.format(c.getTime());
}
,
首先,如果您使用 java 8 或更高版本,我强烈建议不要使用过时的类 java.util.Date
并切换到包 java.time
。您可以使用 class ZonedDateTime
或其任何“兄弟”,例如 LocalDateTime
或其他。同样使用此包,您可以使用类 DateTimeFormatter 将日期格式化为字符串。也可以很容易地添加或减去任何时间单位的数量(例如天、分钟、月等......通过诸如 plusDays() 之类的方法。
但是,在您的情况下,您需要更改方法 getOrderDate 以接收日期作为参数。您将日期传递给您的方法,然后将其转换为字符串。至于在您的日期中添加一天,您可以这样做:
private static final Long ONE_DAY_IN_MILLISECONDS = 24L * 60L * 60L * 1000L
Date date = new Date(); // current date
date.setTime(date.getTime() + ONE_DAY_IN_MILLISECONDS) // incrementing date by one day
,
首先不要将您的订单日期保存在字符串中。由于您需要订购时间,请将其保存在 Instant
中。 Instant
是一个独立于时区或 UTC 偏移量的时间点(有人说它在 UTC 中)。当您需要展示时,您始终可以将其格式化为用户时区中的字符串。它与数字和布尔值相同,您不要将它们保存在字符串中(我希望)。
第二次使用 java.time 进行日期和时间工作。我提到的 Instant
类属于 java.time。
第三不要假装 GMT-4:00 是一个时区。这是一个 GMT 偏移量。您的用户可能会在夏令时 (DST) 开始或结束时的任何时候使用不同的 GMT 偏移量,或者政客只是改变他们对属于哪个 GMT 偏移量的想法。因此,请使用适当的时区 ID,如美国/巴巴多斯。格式为地区/城市。
所以你的方法变得简单:
public Instant getOrderDate() {
return Instant.now();
}
要添加一天 - 以获得明天相同的时间 - 您首先需要决定一个时区,因为在某些时区,一天有时可能是 23 或 25 小时。我想你想考虑到这一点,而不是盲目地增加 24 小时。例如:
ZoneId zone = ZoneId.of("Africa/Windhoek");
ZonedDateTime orderDateTime = getOrderDate().atZone(zone);
ZonedDateTime tomorrow = orderDateTime.plusDays(1);
String tomorrowInIso8601Format = tomorrow.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
System.out.println(tomorrowInIso8601Format);
我刚才运行时的输出:
2021-01-07T19:01:39.281591+02:00
我正在利用内置格式化程序这一事实。
链接
Oracle tutorial: Date Time 解释如何使用 java.time。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。