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

时间:2012-05-29 10:00:24

标签: java date simpledateformat

如何将此日期类型“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”是String类型,如何转换日期类型“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);

输出为String类型。我想获得日期类型输出,所以我添加了以下代码。

   Date outputDate = outputDF.parse(strDate);

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

我还想让输出类型为日期类型格式。

5 个答案:

答案 0 :(得分:2)

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")));

答案 1 :(得分:1)

字符串!=日期

您的主要问题是将字符串视为日期。它不是。考虑“$ 12.34”不是数字,它是为演示格式化的数字和货币类型的文本表示。你也有日期时间和时区的文字表示。

String→Date-Time→String

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

java.time

您使用的是最早版本的Java中的旧日期时间类。这些类,虽然是勇敢的行业首创,但已被证明是混乱和有缺陷的。避免它们。

Java 8及更高版本中内置的java.time框架取代了棘手的旧java.util.Date/.Calendar类。新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继承者,在概念上类似但重新设计。由JSR 310定义。由ThreeTen-Extra项目扩展。请参阅Oracle Tutorial

格式化

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

请注意,在格式化程序中,我们使用第二个参数来指定Locale。该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格式。我建议尽可能使用这些标准格式,因为它们易于阅读,明确,而且标准。

您想要的格式接近标准,但用空格替换T。您的格式会忽略任何offset-from-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为格式化程序提供一个语言环境,其语言将用于月份名称和日期名称。

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:jeudi2février201212 h 00 -12:00

答案 2 :(得分:0)

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));

答案 3 :(得分:0)

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);

答案 4 :(得分:0)

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