gpt4 book ai didi

java - 本周第一天在上一年,如何严格解析只有年和周数的日期?

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

我的目标是进行严格的解析(并禁止诸如“98/99”之类的日期)。但是,以下代码引发 java.text.ParseException 消息 Unparseable date: "98/01":

SimpleDateFormat sdf = new SimpleDateFormat("yy/ww");
sdf.setLenient(false);
sdf.parse("98/01");

这确实是为了 first week of 1998 ,从星期四开始。但是,一周的解析总是返回本周的第一天的日期。在那种情况下,它将是 12/29/1997。这就是引发异常的原因。

这个问题似乎来自 GregorianCalendar 类,更具体地说,来自 computeTime() 方法,该方法在解析时检查原始字段是否与外部设置的字段匹配不宽容:

if (!isLenient()) {
for (int field = 0; field < FIELD_COUNT; field++) {
if (!isExternallySet(field)) {
continue;
}

if (originalFields[field] != internalGet(field)) {
// Restore the original field values
System.arraycopy(originalFields, 0, fields, 0, fields.length);
throw new IllegalArgumentException(getFieldName(field));
}
}
}

这是一个错误吗?我认为解析 1998/01 确实应该返回 12/29/1997 并且不会引发任何异常。但是,您知道如何让解析返回 01/01/1998(这将是指定年份中一周的第一天)吗?

最佳答案

我认为这对你有用(为此你需要图书馆的 joda 时间):

public static Date parseYearWeek(String yearWeek) {
DateTime dateTime = DateTimeFormat.forPattern("yy/ww").parseDateTime(yearWeek);

if (dateTime.getWeekOfWeekyear() == 1 && dateTime.getMonthOfYear() == 12) {
dateTime = DateTimeFormat.forPattern("yyyy/mm").parseDateTime((dateTime.getYear() + 1) + "/01");
}

return dateTime.toDate();
}

关于java - 本周第一天在上一年,如何严格解析只有年和周数的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5801708/

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