java - Java 8 日期表达式
问题描述
JSR 310 为 Java 8 带来了一个不错的日期时间 API。我想知道是否有某种表达式语言可以创建,例如java.time.LocalDate
使用
now + 2y
这将类似于
LocalDate.now().plusYears(2)
Java中有这样的功能吗?
这个问题可能有点宽泛,但让我进一步解释一下。我正在寻找某种可以应用于例如 a 的表达式LocalDate
。原来有Duration
& Period
。
这意味着我可以根据标准化的 ISO-8601 格式(例如P2Y
.
如果我然后做类似的事情
LocalDate.now().plus(Period.parse("P2Y"));
有了这个,我得到了我正在寻找的非常基本的行为。
解决方案
(回答是因为评论太小且未格式化)
虽然我不知道这样的 API,但可能存在,但您必须将某种类似语言的对象(例如 String-literals)传递到方法中以定义您想要的内容。
它可能看起来像这样:
DateTimeUtil.offset("+2y");
这样的 API 可以做的更多:
Calendar oldCalendarObject = ...;
DateTimeUtil.shift("+2y+6M-6d");
可以通过正则表达式解析来完成,所以它甚至没有那么复杂。
public class DateTimeUtil {
private static final Pattern SHIFT_PATTERN = Pattern.compile("\\s*([+-])(\\d+)([yMdmsn])\\s*");
public static void shift(Calendar cal, String shift) {
Matcher matcher = SHIFT_PATTERN.matcher(shift);
while (matcher.find()) {
boolean positive = matcher.group(1).equals("+");
int num= Integer.valueOf(matcher.group(2));
String unit = matcher.group(3);
// do modification here.
}
}
}
推荐阅读
- c# - 如何从 Windows 服务调用 exe?
- android - 已签名 APK 中的 Linkedin 登录错误(Android)
- node.js - Visual Studio Code - 调试nodejs代码时未验证的断点
- android - 如何通过 java 代码操作 build.gradle 的产品风格
- php - 使用 JSON 数据创建对象/模型,这不是所需模型对象的精确副本
- java - 用户解锁后未重新生成 Windows 机器上的 Kerberos 缓存票证
- swift - 即使认为文档说它是正确的,额外的参数调用
- package.json - package.json、package-lock.json 和 yarn.lock 文件的区别?
- ios - 如何从应用内购买中获得购买的产品
- reactjs - 反应 js 动作不起作用