我要解析的字符串:
Sun 11月10日10:00:00 CET 2013
我的代码:
substrings = "Sun Nov 10 10:00:00 CET 2013"
SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM d HH:mm:ss ZZZ yyyy");
Date date = parserSDF.parse(substrings);
编译器错误输出:
java.text.ParseException:Unparseable date:“Sun Nov 10 10:00:00 CET 2013” at java.text.DateFormat.parse(Unknown Source) ...
答案 0 :(得分:1)
可能你错过了正确的Locale。在您的示例中尝试此操作:
SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM d HH:mm:ss ZZZ yyyy", Locale.US);
答案 1 :(得分:0)
ZZZ将尝试根据RFC 822时区格式化时区,改为使用zzz。
答案 2 :(得分:0)
现代方法使用 java.time 类。
String input = "Sun Nov 10 10:00:00 CET 2013";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss z uuuu" , Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
zdt.toString():2013-11-10T10:00 + 01:00 [欧洲/巴黎]
可怕的旧java.util.Date
类在多年前被java.time.Instant
类所取代。两者都代表UTC的时刻。要从上面显示的时区调整为UTC,只需提取一个Instant
对象。
Instant instant = zdt.toInstant() ; // Adjust from time zone to UTC.
避免使用java.util.Date
。但是,如果您必须与尚未更新为 java.time 的旧代码进行互操作,则可以来回转换。请参阅添加到旧类中的新方法,例如Date.from
和Date::toInstant
方法。
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。
答案 3 :(得分:-1)
问题是parserSDF采用字符串而不是数组和ParsePosition。我写这个是为了输出我想你想要的东西。
import java.text.*;
public class Parser{
public static void main(String[] args){
String input = "Sun Nov 10 10:00:00 CET 2013";
SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM d HH:mm:ss ZZZ yyyy");
System.out.println(parserSDF.parse(input, new ParsePosition(0)));
}
}
我建议您查看API中的SimpleDateFormat和ParsePosition