echo.call(undefined, "print me");
我试图使用3种不同的区域格式'z','zzz','zzzz'来解析这个日期但是所有抛出java.text.ParseException:Unparseable date:“Mon Aug 08 16:44:19 EAT 2016” (抵消20)
答案 0 :(得分:4)
您必须添加区域设置:
lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy",Locale.ENGLISH);
完整示例:
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",Locale.ENGLISH); //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: ");
答案 1 :(得分:1)
如下面的链接所示,根据SimpleDateFormat文档,时区似乎不接受“ZZZ”格式。 链接是: Simpledateformat ParseException
我能够通过将区域称为“东非时间”而不是“EAT”来解决这个问题 代码是:
public void dateFormatter() {
String dateString = "Mon Aug 23 8:42:19 East Africa Time 2016";
String dateFormat= "EEE MMM dd HH:mm:ss z yyyy";
SimpleDateFormat setDateFormatter;
Date formattedDate = null;
if(!dateString.isEmpty()) {
setDateFormatter = new SimpleDateFormat(dateFormat, Locale.ENGLISH);
try {
formattedDate = setDateFormatter.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
}
System.out.println("Formatted Date: " + formattedDate);
}
答案 2 :(得分:0)
我的代码没有错误。我改变了一下尝试输出结果并得到这个
“convertLocalTimeToUTC:Mon Aug 08 21:44:19 SGT 2016”
package self.test.out;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class DateParseTest {
public static void main(String[] args) {
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: "+lv_localDate);
}
}
使用Jdk1.6
答案 3 :(得分:0)
这是我在项目中使用的实用程序功能。只需传递字符串和日期格式即可。在这种情况下,dateformat将是“EEE MMM dd HH:mm:ss Z yyyy”。希望它有所帮助。
mymodule
答案 4 :(得分:0)
您正在使用现在由java.time类取代的麻烦的旧日期时间类。
避免将EAT
用作区域。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。指定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格式的字符串,通过在括号中附加区域名称进行扩展。当您需要将日期时间值序列化为文本时,这些标准格式是更好的选择。
System.out.println ( "zdt: " + zdt );
zdt:2016-08-08T16:44:19 + 03:00 [非洲/内罗毕]
java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date
,.Calendar
和& java.text.SimpleDateFormat
。
现在位于Joda-Time的maintenance mode项目建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。
大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
等。