这是我的日期String" Thu Feb 25 12:58:28 MST 2016"然后我使用这个合成器来解析" E MMM dd HH:mm:ss Z yyyy"。
但是我得到了日期解析错误。
我该怎么办?
我正在使用以下函数
解析日期字符串public static String getDate(String targrtDate) {
String dateStr = targrtDate;
DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
Date date = null;
try {
date = (Date) formatter.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
if (date == null) {
return "";
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String formatedDate = cal.get(Calendar.DATE) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.YEAR);
String formatedTime = cal.get(Calendar.HOUR) + "/" + cal.get(Calendar.MINUTE);
Log.i("formatedDate", "" + formatedDate + " " + formatedTime);
return formatedDate;
}
答案 0 :(得分:0)
我已经解决了日期解析问题。
如果有人使用MST时区并且如果它给出了解析错误,那么请将SimpleDateFormat()的第二个参数添加为
new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy", Locale.US);
所以我的最终代码将是
public static String getDate(String targrtDate) {
String dateStr = targrtDate;
SimpleDateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy", Locale.US);
Date date = null;
try {
date = (Date) formatter.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
if (date == null) {
return "";
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String formatedDate = cal.get(Calendar.DATE) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.YEAR);
String formatedTime = cal.get(Calendar.HOUR) + ":" + cal.get(Calendar.MINUTE);
Log.i("formatedDate", "" + formatedDate + " " + formatedTime);
return formatedDate;
}
特别感谢@MenoHochschild
答案 1 :(得分:0)
ZonedDateTime.parse(
"Thu Feb 25 12:58:28 MST 2016" ,
DateTimeFormatter.ofPattern( "E MMM dd HH:mm:ss z uuuu" , Locale.US )
)
2016-02-25T12:58:28-07:00 [美国/丹佛]
现代方法使用java.time类。对于Android,请参阅下面的最后一个项目符号。
String input = "Thu Feb 25 12:58:28 MST 2016" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM dd HH:mm:ss z uuuu" , Locale.US ) ;
ZonedDateTime zdt = ZonedDateTime.parse( input , f ) ;
请参阅此代码在IdeOne.com上直播。 (但请注意,该站点上的JVM硬连接到Locale.US
,其他任何内容都被忽略。)
zdt.toString():2016-02-25T12:58:28-07:00 [America / Denver]
您的输入字符串格式很糟糕。如果可能,请更改为使用标准ISO 8601格式。标准格式实用,易于通过机器解析,并且易于被不同文化的人阅读。方便的是,在解析/生成字符串时,默认情况下会在java.time类中使用这些格式。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如MST
或EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的( !)。
ZoneId zEdmonton = ZoneId.of( "America/Edmonton" ) ;
ZoneId zDenver = ZoneId.of( "America/Denver" ) ;
ZoneId zMazatlan = ZoneId.of( "America/Mazatlan" ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?