作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在java中存储带有可选月份和日期的日期。我知道java.time.LocalYear
仅存储年份的类。我应该创建自己的自定义类来保存带有可选月份和日期的日期吗?或者是否有任何自定义库可以解决该问题。
public class Date {
private LocalYear year;
private int month;
private int day;
public Date(LocalYear year) {
this.year = year;
}
public Date(LocalYear year, int month) {
this.year = year;
this.month = month;
}
public Date(LocalYear year, int month, iny day) {
this.year = year;
this.month = month;
this.day = day;
}
}
最佳答案
如果不了解您的用例,就很难指导您。一种选择是使用 TemporalAccessor 接口(interface)作为带或不带月份和/或日期的日期的通用类型,然后放置 LocalDate
、YearMonth
或 Year
到变量中(最后一个类称为 Year
(不是 LocalYear
,尽管它符合命名方案))。例如:
List<TemporalAccessor> dates = List.of(
LocalDate.of(2019, Month.OCTOBER, 3), // full date
YearMonth.of(2019, Month.NOVEMBER), // no day of month
Year.of(2020)); // no month or day of month
我们可以用它做什么?一个例子:
for (TemporalAccessor ta : dates) {
System.out.println(ta);
System.out.println("Year: " + ta.get(ChronoField.YEAR));
if (ta.isSupported(ChronoField.MONTH_OF_YEAR)) {
System.out.println("Month: " + ta.get(ChronoField.MONTH_OF_YEAR));
} else {
System.out.println("Month: undefined");
}
if (ta.isSupported(ChronoField.DAY_OF_MONTH)) {
System.out.println("Day: " + ta.get(ChronoField.DAY_OF_MONTH));
} else {
System.out.println("Day: undefined");
}
System.out.println();
}
输出:
2019-10-03
Year: 2019
Month: 10
Day: 3
2019-11
Year: 2019
Month: 11
Day: undefined
2020
Year: 2020
Month: undefined
Day: undefined
我无法判断它是否或如何满足您的要求。
使用 ChronoField
常量进行访问是低级的,因此您可能需要将 TemporalAccessor
包装在一个带有漂亮 getter 的漂亮类中。例如:
public class PartialDate {
private TemporalAccessor date;
public PartialDate(Year year) {
date = year;
}
public PartialDate(Year year, int month) {
date = year.atMonth(month);
}
public PartialDate(Year year, int month, int day) {
date = year.atMonth(month).atDay(day);
}
public Year getYear() {
return Year.from(date);
}
public OptionalInt getMonthValue() {
if (date.isSupported(ChronoField.MONTH_OF_YEAR)) {
return OptionalInt.of(date.get(ChronoField.MONTH_OF_YEAR));
} else {
return OptionalInt.empty();
}
}
// A similar getDay method
}
您可以根据需要扩展类(class)。也许您想要直接接受 Month
枚举常量和/或 YearMonth
对象的构造函数和/或返回包装在 Optional
中的类型的 getter .
链接: Oracle tutorial: Date Time解释如何使用 java.time。
关于java:表示带有可选月份和日期的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58155682/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!