java字符串到utc日期

时间:2011-08-18 22:08:34

标签: java date

此问题意图是this question重复。似乎较旧的一个被“忽略”,而答案中没有一个是答案。

我需要用给定的日期模式/格式解析给定日期。

我有这个代码,应该工作:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main
{

    public static void main(String[] args)
    {
        final Date date = string_to_date("EEE MMM dd HH:mm:ss zzz yyyy",
                "Thu Aug 14 16:45:37 UTC 2011");
        System.out.println(date);
    }

    private static Date string_to_date(final String date_format,
            final String textual_date)
    {
        Date ret = null;

        final SimpleDateFormat date_formatter = new SimpleDateFormat(
                date_format);
        try
        {
            ret = date_formatter.parse(textual_date);
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }

        return ret;
    }
}

出于某种原因,我得到了这个输出:

java.text.ParseException: Unparseable date: "Thu Aug 14 16:45:37 UTC 2011"
    at java.text.DateFormat.parse(DateFormat.java:337)
    at Main.string_to_date(Main.java:24)
    at Main.main(Main.java:10)
null

我的日期模式有什么问题?这似乎是一个谜。

3 个答案:

答案 0 :(得分:11)

您的平台默认语言环境显然不是英语。 ThuAug是英文。您需要明确指定Locale2nd argument in the constructor of SimpleDateFormat

final SimpleDateFormat date_formatter = 
    new SimpleDateFormat(date_format, Locale.ENGLISH); // <--- Look, with locale.

如果没有它,将使用平台默认语言环境来解析日/月名称。您可以通过以下方式Locale#getDefault()了解您的平台默认区域设置:

System.out.println(Locale.getDefault());

答案 1 :(得分:1)

这应该解析给定的字符串。

public static void main(String[] args) throws ParseException
{
    String sd = "Thu Aug 14 16:45:37 UTC 2011";


    String dp = "EEE MMM dd HH:mm:ss zzz yyyy";

    SimpleDateFormat sdf = new SimpleDateFormat(dp);

    Date d = sdf.parse(sd);

    System.out.println(d);

}

答案 2 :(得分:0)

我应该指定一个区域设置,如下所示:

final SimpleDateFormat date_formatter = new SimpleDateFormat(date_format, Locale.ENGLISH);

感谢BalusC与他的great answer

相关问题