我有问题格式化日期。
来自:EEE,MMM yyyy HH:mm:ss Z(例如:星期一,2014年1月5日15:10:00 +0200)
致:dd / MMM / yyyy HH:mm(例如:05/01/2014 15:10)
这是我试过的:
private String formatDate(String date) {
SimpleDateFormat format = new SimpleDateFormat("dd/MMM/yyyy HH:mm");
Date dateResult = null;
try {
dateResult = format.parse(date);
}
catch (java.text.ParseException e) {
Log.e(TAG, "", e);
}
return dateResult.toString();
}
我得到例外:偏移0的不可解析日期
一些帮助会很好,谢谢;)
答案 0 :(得分:4)
你需要两次转换。例如:
private String formatDate(String date) {
SimpleDateFormat formatFrom = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z ");
java.util.Date tmpDate = formatFrom.parse(date);
SimpleDateFormat formatTo = new SimpleDateFormat("dd/MMM/yyyy HH:mm");
return formatTo.format(tmpDate);
}
对于我自己的RSS解析器,我使用以下代码来解析不同的日期格式:
if (value.contains("+")) {
value = value.substring(0, value.lastIndexOf("+") - 1);
}
String[] patterns = {//"EEE, dd MMM yyyy hh:mm:ss UTC",
"yyyy.MM.dd G 'at' HH:mm:ss z",
"EEE, MMM d, ''yy",
"yyyyy.MMMMM.dd GGG hh:mm aaa",
"EEE, d MMM yyyy HH:mm:ss Z",
"yyMMddHHmmssZ",
"d MMM yyyy HH:mm:ss z",
"yyyy-MM-dd'T'HH:mm:ss",
"yyyy-MM-dd'T'HH:mm:ss'Z'",
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
"yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss.SSSZ",
"yyyy-MM-dd'T'HH:mm:ssz",
"yyyy-MM-dd'T'HH:mm:ss.SSSz",
"EEE, d MMM yy HH:mm:ssz",
"EEE, d MMM yy HH:mm:ss",
"EEE, d MMM yy HH:mm z",
"EEE, d MMM yy HH:mm Z",
"EEE, d MMM yyyy HH:mm:ss z",
"EEE, d MMM yyyy HH:mm:ss Z",
"EEE, d MMM yyyy HH:mm:ss ZZZZ",
"EEE, d MMM yyyy HH:mm z",
"EEE, d MMM yyyy HH:mm Z",
"d MMM yy HH:mm z",
"d MMM yy HH:mm:ss z",
"d MMM yyyy HH:mm z",
"d MMM yyyy HH:mm:ss z"};
for (int i = 0; i < patterns.length; i++) {
SimpleDateFormat sdf = new SimpleDateFormat(patterns[i], Locale.ENGLISH);
try {
pubdate = sdf.parse(value);
break;
} catch (Exception e) {
}
}
答案 1 :(得分:1)
试试这个
SimpleDateFormat form = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
SimpleDateFormat postFormater = new SimpleDateFormat("dd/MMM/yyyy HH:mm");
String inputdate = "Mon, 05 Jan 2014 15:10:00 +0200";
Date date = null;
try {
date = form.parse(inputdate);
} catch (ParseException e) {
e.printStackTrace();
}
String resultdate = postFormater.format(date);
答案 2 :(得分:1)
尝试以下代码:
String parseStringDate(String sqlDate) {
String strDate = "";
java.util.Date utilDate;
SimpleDateFormat sqlDateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
try {
Calendar calTempDate = Calendar.getInstance();
utilDate = sqlDateFormat.parse(sqlDate);
calTempDate.setTime(utilDate);
strDate = new SimpleDateFormat("dd/MMM/yyyy HH:mm").format(calTempDate.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return strDate;
}
答案 3 :(得分:0)
Mon, 05 Jan 2014 15:10:00 +0200
的示例数据不正确。那个日期是星期天,而不是星期一。
现代的方法是使用java.time类。
您的输入格式符合RFC 1123。 java.time类包含formatter for that specific format。
String input = "Sun, 05 Jan 2014 15:10:00 +0200";
DateTimeFormatter f = DateTimeFormatter.RFC_1123_DATE_TIME ;
OffsetDateTime odt = OffsetDateTime.parse( input , f );
odt.toString():2014-01-05T15:10 + 02:00
至于生成其他格式的字符串,已在Stack Overflow中多次覆盖。搜索DateTimeFormatter
类。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
如果JDBC driver符合JDBC 4.2或更高版本,您可以直接与数据库交换 java.time 对象。不需要字符串或java.sql。* classes。
从哪里获取java.time类?