private void parseDate() {
String p_localDateTime = "Mon Aug 08 16:44:19 EAT 2016";
SimpleDateFormat lv_formatter,lv_parser;
String lv_localTimeZone ="";
lv_localTimeZone="EAT";
Date lv_localDate = null;
lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
//lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
//lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
lv_parser.setTimeZone(TimeZone.getTimeZone(lv_localTimeZone));
try {
lv_localDate = lv_parser.parse(p_localDateTime);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println("convertLocalTimeToUTC: ");
}
我试图用3种不同的区域格式’z’,’zzz’,’zzzz’来解析这个日期但是所有抛出java.text.ParseException:Unparseable date:“Mon Aug 08 16:44:19 EAT 2016”(偏移20)
解决方法:
您正在使用现在由java.time类取代的麻烦的旧日期时间类.
使用java.time
避免将EAT用作区域.切勿使用3-4字母缩写,例如EST或IST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!).指定proper time zone name.在此特定情况下,java.time能够将其转换为Africa/Nairobi区域.
String input = "Mon Aug 08 16:44:19 EAT 2016";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "EEE MMM dd HH:mm:ss z uuuu" ).withLocale ( Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse ( input , f );
转储到控制台. toString方法生成标准ISO 8601格式的String,通过在括号中附加区域名称进行扩展.当您需要将日期时间值序列化为文本时,这些标准格式是更好的选择.
System.out.println ( "zdt: " + zdt );
zdt: 2016-08-08T16:44:19+03:00[Africa/Nairobi]
关于java.time
java.time框架内置于Java 8及更高版本中.这些类取代了旧的麻烦的日期时间类,如java.util.Date,.Calendar,& java.text.SimpleDateFormat中.
要了解更多信息,请参阅Oracle Tutorial.并搜索Stack Overflow以获取许多示例和说明.
许多java.time功能都被反向移植到Java 6& 07年7月7日进一步适应ThreeTenABP Android(见How to use…).
ThreeTen-Extra项目使用其他类扩展了java.time.该项目是未来可能添加到java.time的试验场.您可以在这里找到一些有用的课程,如Interval,YearWeek,YearQuarter等.
标签:java,date,android,android-studio
来源: https://codeday.me/bug/20190608/1199349.html