不能在日期字段中使用超过“2038”的年份:Java

我在应用程序中保存超过 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"   }));

我在 jsp 页面上全局设置 datePattern

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

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


慕娘9325324
浏览 110回答 1
1回答

慕姐8265434

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该类LocalDate表示仅日期值,没有时间、时区或相对于 UTC 的偏移量。➥ 此类解析具有两位数年份的输入字符串,始终使用 20xx 世纪。String input = "1/23/40" ; DateTimeFormatter f = DateTimeFormatter.ofPattern( "M/d/uu" ) ; LocalDate localDate = LocalDate.parse( input , f ) ;localDate.toString(): 2040-01-23提示:我发现在商业应用程序中使用 2 位数年份非常麻烦。日期和月份的含糊性很容易造成误解和沟通不畅。我建议始终使用 4 位数年份。当跨文化共享数据时,这个问题更加严重。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java