繁体   English   中英

如何在日期之间更改日期格式类型?

[英]How to change Date format type between dates?

如何将此日期类型“ Thu Feb 02 12:00:00 GMT-12:00 2012”更改为另一个日期类型“ yyyy-mm-dd HH:mm:ss”? 如果“ Thu Feb 02 12:00:00 GMT-12:00 2012”是字符串类型,如何转换“ yyyy-MM-dd HH:mm:ss”的日期类型?

Java代码:

DateFormat inputDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
   DateFormat outputDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   Date dd = inputDF.parse("Thu Feb 02 12:00:00 GMT-12:00 2012");
   String strDate = outputDF.format(dd);

输出为字符串类型。 我想获取Date类型的输出,因此添加了以下代码。

   Date outputDate = outputDF.parse(strDate);

但是,我再次使用“ EEE MMM dd HH:mm:ss Z yyyy”格式的日期。 我想使用这种“ yyyy-MM-dd HH:mm:ss”格式获取日期,并且还想要日期类型。

我也想得到的输出类型是日期类型格式。

DateFormat inputDF = new SimpleDateFormat(
                "EEE MMM dd HH:mm:ss Z yyyy");
        DateFormat outputDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(outputDF.format(inputDF.parse("Thu Feb 02 12:00:00 GMT-12:00 2012")));

字符串!=日期

您的主要问题是将字符串视为日期。 它不是。 考虑到“ $ 12.34”不是数字,它是数字和货币类型的文本表示形式,用于表示。 您也可以使用日期时间和时区的文字表示。

字符串→日期时间→字符串

因此,第一步是将字符串解析为日期时间对象。 然后使用该日期时间对象生成其日期时间值的文本表示形式。

java.time

您正在使用Java最早版本中的旧日期时间类。 这些类虽然是业界首屈一指的英勇尝试,但事实证明它们令人困惑和存在缺陷。 避免他们。

Java 8和更高版本中内置的java.time框架取代了麻烦的旧java.util.Date/.Calendar类。 新课程的灵感取自于成功的Joda-Time框架,该框架旨在作为其继任者,其概念相似但经过重新架构。 JSR 310定义。 ThreeTen-Extra项目扩展。 请参阅《 Oracle教程》

格式化程序

我们必须指定一个编码模式来定义一个格式化程序,我们将用它来解析您的输入字符串。 这些代码与旧的java.text.SimpleDateFormat类相似,但不完全相同。 因此,请仔细研究该文档 注意将O用于localized zone-offset

请注意,在格式化程序上,我们使用第二个参数指定Locale 该语言环境指定用于解析和翻译月份和日期名称的人类语言。 如果省略,则使用JVM的当前默认Locale。 该默认值可以随时更改,因此我建议始终指定期望的语言环境。

String input = "Thu Feb 02 12:00:00 GMT-12:00 2012";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "EEE MMM dd HH:mm:ss O yyyy" , Locale.ENGLISH );
ZonedDateTime zdt = ZonedDateTime.parse ( input , formatter );

转储到控制台。

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

2012-02-02T12:00-12:00

该输出为标准ISO 8601格式。 我建议在可能的情况下使用这些标准格式,因为它们易于阅读,明确且标准。

所需的格式接近标准,但用SPACE代替了T 并且您的格式忽略了任何与UTC或时区的偏差 忽略时区是有风险的,因为人类读者可能会假定错误的时区。 但是,如果您坚持要自己定义这种模式。

DateTimeFormatter formatterOutput = DateTimeFormatter.ofPattern ( "yyyy-MM-dd HH:mm:ss" );
String output = zdt.format ( formatterOutput );

转储到控制台。

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

zdt:2012-02-02T12:00-12:00输出:2012-02-02 12:00:00

更好的是,让java.time为您本地化。 注意我们如何调用withLocale给格式化程序一个Locale,其语言将用于月份名称和日期名称。

DateTimeFormatter formatterLocalized = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL );
formatterLocalized = formatterLocalized.withLocale ( Locale.CANADA_FRENCH );
String outputLocalized = zdt.format ( formatterLocalized );

转储到控制台。

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

zdt:2012-02-02T12:00-12:00输出:2012-02-02 12:00:00 outputLocalized:jeudi 2février2012 12 h 00 -12:00

String strDate = "Thu Feb 02 12:00:00 GMT-12:00 2012";
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy - HH:mm:ss");
dateFormat.format(strDate);

And to get the result in Date, You can use the following :

Date d = new Date(dateFormat.format(strDate));
String dateStart = "Thu Feb 02 12:00:00 GMT-12:00 2012";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = format.parse(**dateStart**);
System.out.prinln("formatted date.." + d1);

你不能那样做。 Date对象没有表示格式。 它只有数据。 格式化程序具有格式。 格式化用于显示数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM