gpt4 book ai didi

java - 在java中将字符串日期转换为美国格式

转载 作者:行者123 更新时间:2023-11-30 06:11:11 30 4
gpt4 key购买 nike

我有下面的代码,其中日期是字符串类型,我必须将它设置为美国格式所以在下面我展示了它

private static final SimpleDateFormat usOutputDate =  new SimpleDateFormat("MM/dd/yyyy");

在一个方法中,我编写了以下代码,在 dealDateString 中,值以 02-Mar-2015

的形式出现
// dealDateString = 02-Mar-2015 
java.util.Date dealDate = extractDate(dealDateString);
//here its value get converted in US format that is 03/02/2015
String dd = usOutputDate.format(dealDate);

DateFormat format = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
// ***issue comes here as it get back converted in US format ***
java.util.Date date = format.parse(dd);
brokerInvoiceLineItem.setDealDate(new Date(date));

如上面的代码所示,String dd 中的值是 03/02/2015 但问题出在格式变量中它的值以英国格式转换回我不想要的请告知我如何将其转换为英国格式已转换为之前存储在 String dd 中的美国格式。

最佳答案

accepted Answer通过 Silambarasan Poonguti 和 other Answer Ramesh Ponnada 的文章都是正确的。但两者都已过时,使用与最早版本的 Java 捆绑在一起的旧日期时间类。这些类已被证明是麻烦、困惑和有缺陷的。

java.time

java.time Java 8 中内置的框架,后来取代了旧的 java.util.Date/.Calendar 类。新类(class)的灵感来自非常成功的 Joda-Time框架,旨在作为其继任者,在概念上相似但重新构建。由 JSR 310 定义.由 ThreeTen-Extra 扩展项目。查看Oracle Tutorial .

本地日期

这些新类包括 LocalDate用于处理没有时间和时区的仅日期值。尽管 LocalDate 不包含时区,但请注意时区对于确定日期(例如“今天”)至关重要。世界各地的日期在任何时候都不相同,因为新的一天在东方黎明得更早。

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;

解析字符串

要解析字符串,请指定编码模式。此模式类似于旧 java.text.SimpleTextFormat 中使用的模式,但不完全相同。所以一定要研究java.time.format.DateTimeFormatter密切关注。

请注意,我们使用三重 M 来指定我们希望使用当天名称的缩写。这是Question中解决问题的关键。

另请注意,我们指定了一个 Locale,它告诉 java.time 我们期望该缩写名称的人类语言。

String input = "02-Mar-2015";
Locale locale = Locale.US;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "dd-MMM-yyyy" ).withLocale ( locale );
LocalDate localDate = LocalDate.parse ( input , formatter );

转储到控制台。默认情况下,java.time 中的 toString 方法使用标准 ISO 8601格式。

System.out.println ( "localDate: " + localDate );

localDate: 2015-03-02

生成字符串

当生成日期时间值的字符串表示形式时,通常最好让 java.time 为您本地化它,而不是采用特定格式。 java.time.format包中有此类工作的类(class)。

注意对 withLocale 的调用。 Locale 指定了两个元素,预期格式的文化规范和用于日期和月份名称的人类语言。如果不指定区域设置,则隐式应用 JVM 当前的默认区域设置。最好是明确的,因为默认值可以随时更改。

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.SHORT ).withLocale ( Locale.US );
String output = today.format ( formatter );

转储到控制台。

System.out.println ( "output: " + output );

output: 12/29/15

如果您坚持特定格式,请指定编码模式。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MM/dd/yyyy" );
String output = today.format ( formatter );

output: 12/29/2015

转化

如果您手头有 java.util.Date,请转换为 java.time。一个Instant是时间轴上的一个时刻 UTC .

Instant instant = myJUDate.toInstant();

指定您想要形成日期的时区,生成 ZonedDateTime

ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ) ;

然后要求生成一个 LocalDate,它的值是从 ZonedDateTime 中提取的。

LocalDate localDate = zdt.toLocalDate();

关于java - 在java中将字符串日期转换为美国格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34504131/

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