0

如何将此日期类型“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”的Date类型?

爪哇代码:

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 outputDate = outputDF.parse(strDate);

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

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

4

5 回答 5

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")));
于 2012-05-29T10:04:48.247 回答
1

字符串 != 日期

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

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

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

java.time

您正在使用 Java 最早版本中的旧日期时间类。这些课程虽然是业界首创的勇敢尝试,但已被证明令人困惑且存在缺陷。避开他们。

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

格式化程序

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

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

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空格替换。并且您的格式省略了任何与 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 输出本地化:jeudi 2 février 2012 12 h 00 -12:00

于 2015-12-25T22:51:26.900 回答
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));
于 2012-05-30T04:45:23.253 回答
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);
于 2014-03-05T10:50:34.237 回答
0

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

于 2015-12-25T20:24:38.590 回答