gpt4 book ai didi

java - 在日期字段 : Java 中不能使用超过 "2038"的年份

转载 作者:行者123 更新时间:2023-12-01 19:35:31 26 4
gpt4 key购买 nike

我在应用程序中保存超过 2038 年的日期时遇到问题,在 jsp 页面上我从日历中获取输入,例如 -

registry.byId('endDateCal').set('value', dojo.date.locale.parse('<c:out value="${empty taskForm.endDate ? taskForm.defaultDate : taskForm.endDate}"/>', {     datePattern: '<%=datePattern%>',     selector: "date"   }));

datePattern 我在我的 jsp 页面上全局设置,如

   SimpleDateFormat dateFormat = (SimpleDateFormat)DateFormat.getDateInstance(DateFormat.SHORT, I18nUtility.getLanguageLocaleForCurrentUser());

String datePattern = dateFormat.toPattern();

当这个值发送到我的 servlet 时,我会获取过去的值,例如如果我设置日期 2040 年 9 月 30 日,那么它会将日期值发送到 servlet 9/30/1941。

我看到了2038问题Year 2038 problem但我的情况并非如此,因为我可以将日期设置为 2038 年,但无法设置超过 2038 年,我还检查 this但没有帮助。

注意寻找jdk 7兼容解决方案

最佳答案

tl;博士

LocalDate                                    // Modern class for representing a date-only value without time-of-day and without time zone.
.parse(
"1/23/40" ,
DateTimeFormatter.ofPattern( "M/d/uu" ) // Defaults to century 20xx.
) // Returns a `LocalDate` object.
.toString() // Generate text in standard ISO 8601 format.

2040-01-23

指定默认世纪

SimpleDateFormat 类有一个设置,用于在解析具有两位数世纪的输入字符串时假定哪个世纪: SimpleDateFormat::set2DigitYearStart .

但是……你应该停止使用这个类。

java.time

那个 SimpleDateFormat 类是与最早版本的 Java 捆绑在一起的糟糕的日期时间类的一部分。这些类现在已成为遗留类,完全被 JSR 310 中定义的现代 java.time 类所取代。

本地日期

LocalDate类表示仅日期值,没有日期时间,也没有 time zoneoffset-from-UTC .

➥ 此类解析具有两位数年份的输入字符串,始终使用 20xx 世纪。

String input = "1/23/40" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "M/d/uu" ) ;
LocalDate localDate = LocalDate.parse( input , f ) ;

查看此code run live at IdeOne.com .

localDate.toString(): 2040-01-23

提示:我发现在商业应用程序中使用两位数年份非常麻烦。日期和月份的含糊性很容易造成误解和沟通不畅。我建议始终使用 4 位数年份。

当跨文化共享数据时,这个问题更加严重。那么我建议使用ISO 8601文本日期时间值的格式。

<小时/>

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。规范为JSR 310 .

Joda-Time项目,现在位于 maintenance mode ,建议迁移到java.time类。

您可以直接与数据库交换java.time对象。使用JDBC driver符合JDBC 4.2或稍后。不需要字符串,不需要 java.sql.* 类。

从哪里获取java.time类?

ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,和 more .

关于java - 在日期字段 : Java 中不能使用超过 "2038"的年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57801728/

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