"Fri Jun 05 00:00:00 PDT 2015" 的日期格式是什么
What is the Date Format for "Fri Jun 05 00:00:00 PDT 2015"
我正在尝试确定要用于
的 java 日期格式字符串
"Fri Jun 05 00:00:00 PDT 2015"
我现在正在使用
SimpleDateFormat format = new SimpleDateFormat("EEE MM dd HH:mm:ss zzzz yyyy");
但这会产生
com.fasterxml.jackson.databind.JsonMappingException:
java.text.ParseException: Unparseable date: "Fri Jun 05 00:00:00 PDT 2015"
(through reference chain:....
您这个月还需要一个 M
:
EEE MMM dd HH:mm:ss zzzz yyyy
这在the Javadocs of SimpleDateFormat
中提到:
Month: If the number of pattern letters is 3 or more, the month is interpreted as text; otherwise, it is interpreted as a number.
Locale
与模式一样重要
无论适用的模式如何,重要的是使用 Locale
作为日期时间 parsing/formatting 类型(例如现代 API 的智能和生动 DateTimeFormatter
,或者臭名昭著且容易出错的 SimpleDateFormat
of the legacy API) 是 Locale
-sensitive。由于您的日期时间字符串是英文的,因此您应该使用 Locale.ENGLISH
.
请注意,旧版日期时间 API(java.util
日期时间类型及其格式 API、SimpleDateFormat
)已过时且容易出错。建议完全停止使用,改用java.time
,modern date-time API*.
使用现代日期时间的演示 API:
对于缩写的月份名称,您需要使用 MMM
而不是 MM
。
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EEE MMM d H:m:s zzz u", Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse("Fri Jun 05 00:00:00 PDT 2015", dtf);
System.out.println(zdt);
}
}
输出:
2015-06-05T00:00-07:00[America/Los_Angeles]
无论出于何种原因,如果您需要来自 ZonedDateTime
对象的 java.util.Date
实例,您可以按如下方式进行:
Date date = Date.from(zdt.toInstant());
从 Trail: Date Time[=60= 中了解有关 modern date-time API* 的更多信息].
注意: 要求您的发布商以 Region/City 格式发送时区名称,如上面的输出所示。三字母时区名称(例如 PDT)不明确,因此容易出错。
* 无论出于何种原因,如果您必须坚持Java 6 或Java 7,您可以使用ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and 。
我正在尝试确定要用于
的 java 日期格式字符串"Fri Jun 05 00:00:00 PDT 2015"
我现在正在使用
SimpleDateFormat format = new SimpleDateFormat("EEE MM dd HH:mm:ss zzzz yyyy");
但这会产生
com.fasterxml.jackson.databind.JsonMappingException:
java.text.ParseException: Unparseable date: "Fri Jun 05 00:00:00 PDT 2015"
(through reference chain:....
您这个月还需要一个 M
:
EEE MMM dd HH:mm:ss zzzz yyyy
这在the Javadocs of SimpleDateFormat
中提到:
Month: If the number of pattern letters is 3 or more, the month is interpreted as text; otherwise, it is interpreted as a number.
Locale
与模式一样重要
无论适用的模式如何,重要的是使用 Locale
作为日期时间 parsing/formatting 类型(例如现代 API 的智能和生动 DateTimeFormatter
,或者臭名昭著且容易出错的 SimpleDateFormat
of the legacy API) 是 Locale
-sensitive。由于您的日期时间字符串是英文的,因此您应该使用 Locale.ENGLISH
.
请注意,旧版日期时间 API(java.util
日期时间类型及其格式 API、SimpleDateFormat
)已过时且容易出错。建议完全停止使用,改用java.time
,modern date-time API*.
使用现代日期时间的演示 API:
对于缩写的月份名称,您需要使用 MMM
而不是 MM
。
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EEE MMM d H:m:s zzz u", Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse("Fri Jun 05 00:00:00 PDT 2015", dtf);
System.out.println(zdt);
}
}
输出:
2015-06-05T00:00-07:00[America/Los_Angeles]
无论出于何种原因,如果您需要来自 ZonedDateTime
对象的 java.util.Date
实例,您可以按如下方式进行:
Date date = Date.from(zdt.toInstant());
从 Trail: Date Time[=60= 中了解有关 modern date-time API* 的更多信息].
注意: 要求您的发布商以 Region/City 格式发送时区名称,如上面的输出所示。三字母时区名称(例如 PDT)不明确,因此容易出错。
* 无论出于何种原因,如果您必须坚持Java 6 或Java 7,您可以使用ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and