如何将此日期类型“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”格式获取日期,并且还想要日期类型。
我还想让输出类型为日期类型格式。
答案 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”不是数字,它是为演示格式化的数字和货币类型的文本表示。你也有日期时间和时区的文字表示。
所以第一步是将该字符串解析为日期时间对象。然后使用该日期时间对象生成其日期时间值的 new 文本表示。
您使用的是最早版本的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
对象没有表示格式。它只有数据。格式化程序具有格式。格式化用于显示数据。