JAVA中的日期转换器

Date converter in JAVA

本问题已经有最佳答案,请猛点这里访问。

我有像Tue Mar 19 00:41:00 GMT 2013这样的日期,如何将其转换为2013-03-19 06:13:00

1
2
3
4
final DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
final Date date = bdate;
Date ndate = formatter.parse(formatter.format(date));
System.out.println(ndate);

给出相同的日期。


使用具有适当格式的两个SimpleDateFormat对象,并使用第一个将字符串解析为日期,使用第二个将日期再次格式化为字符串。


其他人遗漏的一个主要问题是处理时区(TZ)。任何时候你使用SimpleDateFormat来转换日期的字符串表示,你真的需要知道你正在处理的TZ。除非您在SimpleDateFormat上明确设置TZ,否则在格式化/解析时它将使用默认的TZ。除非您只处理默认时区中的日期字符串,否则您将遇到问题。

您的输入日期代表GMT中的日期。假设您还希望将输出格式化为GMT,则需要确保在SimpleDateFormat上设置TZ:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) throws Exception
{
    String inputDate ="Tue Mar 19 00:41:00 GMT 2013";
    // Initialize with format of input
    SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
    // Configure the TZ on the date formatter. Not sure why it doesn't get set
    // automatically when parsing the date since the input includes the TZ name,
    // but it doesn't. One of many reasons to use Joda instead
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    Date date = sdf.parse(inputDate);
    // re-initialize the pattern with format of desired output. Alternatively,
    // you could use a new SimpleDateFormat instance as long as you set the TZ
    // correctly
    sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
    System.out.println(sdf.format(date));
}


正如第一个答案所说。首先用SimpleDateFormat解析你的日期,如下所示:

1
Date from = new SimpleDateFormat("E M d hh:mm:ss z yyyy").parse("Tue Mar 19 00:41:00 GMT 2013");

然后使用它来使用另一个SimpleDateFormat实例格式化生成的日期对象,如下所示:

1
String to = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(from);

在这里查看SimpleDateFormat的javadoc。希望有所帮助。


以这种方式使用SimpleDateFormat:

1
2
3
final DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
final Date date = new Date();
System.out.println(formatter.format(date));


如果您进行任何计算或解析日期,请使用JodaTime,因为标准的JAVA日期支持确实是错误的