java - Joda time - 下次是 X 点钟
问题描述
我需要得到下一个日期时间,比如 20 点。
因此,例如,如果是 13.00 小时,它会给我与今天 20.00 对应的日期时间。
但如果是 21.00,它会在明天 20.00 给我。
我怎样才能做到这一点?是否有一些我找不到名称的内置函数?
在紧要关头,我也可以使用 Java Time 而不是 Joda Time。
解决方案
DateTime
如果时间超过 20:00 ,则添加一天。
演示:
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalTime;
public final class Main {
public static final void main(String[] args) {
// Test
System.out.println(getNextTime("13.00"));
System.out.println(getNextTime("21.00"));
}
static DateTime getNextTime(String strTime) {
LocalTime time = LocalTime.parse(strTime);
DateTime dt = DateTime.now(DateTimeZone.getDefault()).withTime(new LocalTime(20, 0));
if (time.isAfter(new LocalTime(20, 0))) {
dt = dt.plusDays(1);
}
return dt;
}
}
输出:
2021-03-29T20:00:00.000+01:00
2021-03-30T20:00:00.000+01:00
注意:在Joda-Time主页查看以下通知
Joda-Time 是 Java SE 8 之前 Java 的事实上的标准日期和时间库。现在要求用户迁移到 java.time (JSR-310)。
使用现代日期时间 API:
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public final class Main {
public static final void main(String[] args) {
// Test
System.out.println(getNextTime("13.00"));
System.out.println(getNextTime("21.00"));
}
static ZonedDateTime getNextTime(String strTime) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH.mm");
LocalTime time = LocalTime.parse(strTime, dtf);
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.systemDefault()).withHour(20);
if (time.isAfter(LocalTime.of(20, 0))) {
zdt = zdt.plusDays(1);
}
return zdt;
}
}
输出:
2021-03-29T20:00:18.325419+01:00[Europe/London]
2021-03-30T20:00:18.327587+01:00[Europe/London]
推荐阅读
- extjs - 我是否必须在现代和经典工具包的 ExtJS 通用应用程序中复制视图?
- python-3.x - 如何在两个相同的csv文件之间仅获取pandas中的匹配列值
- android - Wordpress 电子商务网站和 Android Studio 应用程序集成
- vue.js - 在vuex状态下保存用户认证状态是安全的解决办法?
- flutter - 如何在 Flutter 运行时向 Row 对象添加项目?
- odata - 如何区分对 SAP 的调用是来自 OData API 还是来自 Fiori 应用程序
- scala - 火花红移下推过滤器
- magento - Magento 移动应用 (Flutter) 使用网站结账
- android - Kotlin Multiplatform 保留选项 iOS 框架
- c# - C#屏幕截图 - 窗口中的颜色检查,而不是全屏