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
我的日期模式有什么问题? 这似乎是一个谜。
您的平台默认语言环境显然不是英语。 Thu
和Aug
是英国人。 您需要在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的出色回答 !