java字符串到utc日期

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

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

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

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 

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

您的平台默认语言环境显然不是英语。 ThuAug是英国人。 您需要在SimpleDateFormat的构造函数中将Locale显式指定为第二个参数 :

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

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

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

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

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

我应该指定一个语言环境,如下所示:

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

感谢BalusC的出色回答 !