gpt4 book ai didi

java - 解析跨越 12 个月数据的没有年份的日期

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:47 25 4
gpt4 key购买 nike

我有许多项目的日期以 MM/dd 格式指定,没有指定年份。

但是,从数据的上下文中隐含了年份,因为数据显示的日期距离“当前日期”(在数据中指定)不早于 12 个月

例如,假设当前日期是 2013 年 1 月 31 日。这意味着将有从 2012 年 2 月 1 日到 2013 年 1 月 31 日(含)的信息。

我在这里面临的问题是,因为数据中没有指定年份,所以我需要自己生成年份,然后才能将它们加载到我的数据库中。

根据数据上下文,我们知道任何大于当前月份的日期都是上一年的日期,而任何小于或等于当前月份的日期都是当年的日期。

假设当前日期是 2013 年 1 月,我们有类似的东西

01/31 - 2013
01/01 - 2013
12/31 - 2012
02/29 - 2012

现在,这里的问题是最后一行的日期。

2012 年是闰年,因此 2 月 29 日确实存在。然而,2013 年不是。

我目前的日期解析方法如下(使用SimpleDateFormat)

  1. 抓取日期:01/31
  2. 将当前年份附加到它:01/31/2016
  3. 使用日期格式解析日期 MM/dd/yyyy

日期解析是在严格模式下执行的,因此 02/29 之类的日期不会滚动到 03/01。

但是,此算法在闰年失败,因为假设当前年份是 2013 年,我将尝试解析 02/29/2013,它会失败。

我可以使用什么方法来确定日期的年份?

最佳答案

将日/月解析为 java.time.MonthDay , 将其与 MonthDay.now() 进行比较并调用atYear根据结果​​使用正确的年份(例如使用 Year.now())。

您可能还想参加 time zones考虑在内。

应用于您的示例的简单版本,假设输入格式正确并忽略时区问题,可能如下所示:

public static void main(String[] args) {
m("01/31", YearMonth.of(2013, 1));
m("01/01", YearMonth.of(2013, 1));
m("12/31", YearMonth.of(2013, 1));
m("02/29", YearMonth.of(2013, 1));
}

private static void m(String date, YearMonth currentMonth) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("MM/dd");
MonthDay md = MonthDay.parse(date, fmt);
int year = currentMonth.getYear();
MonthDay cutoffDate = MonthDay.from(currentMonth.atEndOfMonth());
if (md.isAfter(cutoffDate)) year--;
LocalDate result = md.atYear(year);
System.out.println(date + " - " + year + " ==> " + result);
}

哪些输出:

01/31 - 2013 ==> 2013-01-31
01/01 - 2013 ==> 2013-01-01
12/31 - 2012 ==> 2012-12-31
02/29 - 2012 ==> 2012-02-29

关于java - 解析跨越 12 个月数据的没有年份的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36043358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com