gpt4 book ai didi

java - 日期字段解析错误

转载 作者:行者123 更新时间:2023-12-01 23:45:01 24 4
gpt4 key购买 nike

我想将YYYY-MM-DD格式的日期解析为YYYYMMDD。如果使用以下函数,它将返回YYYYMMDD格式,但具有不同的DD。即:2013-05-16成为20130515

道歉:)我是Java新手。

任何帮助,将不胜感激。

String TestDate=yyyymmddParser.format(oLifEExtension.TestDate().getTime());
sb.append(TestDate)

最佳答案

不确定问题是用于java.util.Date(日期加上时间)还是java.sql.Date(仅日期)。在这两种情况下,都应该使用现代的java.time类,而不要使用麻烦的旧式日期时间类。

其他一些java.sql.Date问题也作为此问题的重复链接。所以我在这里处理两个类(sql和util)。

java.util.Date

旧版java.util.Date类表示UTC时间轴上的时刻。这意味着一个带有日期的日期。诀窍是您的输入字符串仅用于日期值。您可以首先将字符串解析为仅日期的值,然后根据需要分配时间。

您的输入字符串符合YYYY-MM-DD的标准ISO 8601格式。解析/生成字符串时,java.time类默认为标准格式。因此,无需指定格式化模式。

LocalDate ld = LocalDate.parse( "2013-05-16" ) ;


对于一天中的某个时间,您可能想要一天的第一时刻。不要假设第一刻是 00:00:00。在某些时区中,诸如夏令时(DST)之类的异常可能导致一天在不同的时间开始,例如 01:00:00。为了解决此类异常,我们必须在确定一天的第一时刻时指定一个时区。

continent/region的格式指定 proper time zone name,例如 America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用3-4个字母的缩写,例如 ESTIST,因为它们不是真实的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;


在询问java.time中应用该区域来确定一天的第一时刻。我们产生一个 ZonedDateTime对象作为结果。

ZonedDateTime zdt = ld.atStartOfDay( z ) ;


如果需要一天中的特定时间,请应用 LocalTime对象。请记住,您的时间在该特定区域的特定日期可能无效。例如,您可能要指定DST转换期间发生的时间。在这种情况下, ZonedDateTime类具有用于调整以适应的策略。请务必阅读文档,以了解该策略及其产生的行为。

LocalTime lt = LocalTime.of( 12 , 0 ) ; 
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ; // Time-of-day may be adjusted as needed.


java.sql.Date

无需使用 java.sql.Date。该类由 LocalDate代替。 LocalDate类表示没有日期和时区的仅日期值。

符合JDBC 4.2的JDBC驱动程序可以通过调用以下方法直接处理java.time类型:


PreparedStatement::setObject myPrepStmt.setObject(…,myLocalDate);
ResultSet::getObject LocalDate ld = myResultSet.getObject(…,LocalDate.class);


为了向用户呈现 LocalDate,请生成一个字符串,以显示在用户界面中。使用 DateTimeFormatter自动进行本地化。要本地化,请指定:


FormatStyle确定字符串应为多长或缩写。
Locale确定(a)日名,月名等的翻译所用的人类语言,以及(b)决定缩写,大写,标点,分隔符等问题的文化规范。


例:

Locale l = Locale.CANADA_FRENCH ; 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( l );
String output = zdt.format( f );


您也可以沿另一个方向进行操作,即 parsing输入字符串以获取日期。

LocalDate ld = LocalDate.parse( input , f ) ;


捕获用户输入错误或意外时引发的异常。

try{ 
LocalDate ld = LocalDate.parse( input , f ) ;
myPrepStmt.setObject( … , ld ) ;
} catch ( DateTimeParseException e ) {
… // Handle the error condition of faulty/unexpected input by user.
}




关于java.time

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

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

要了解更多信息,请参见 Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为 JSR 310

在哪里获取java.time类?


Java SE 8Java SE 9和更高版本


内置的
标准Java API的一部分,具有捆绑的实现。
Java 9添加了一些次要功能和修复。

Java SE 6Java SE 7


ThreeTen-Backport中的许多java.time功能都已反向移植到Java 6和7。

Android


ThreeTenABP项目专为Android改编了ThreeTen-Backport(如上所述)。
请参见 How to use ThreeTenABP…



ThreeTen-Extra项目使用其他类扩展了java.time。该项目是将来可能向java.time添加内容的试验场。您可能会在这里找到一些有用的类,例如 IntervalYearWeekYearQuartermore

关于java - 日期字段解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17225948/

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