我试图解析此字符串:
"2018-08-21T10:12:06.872722+00:00"
但出现了java.text.ParseException。
我正在使用这种格式:
"yyyy-MM-dd'T'HH:mm:ss.SSSz"
重要:我尝试使用XXX,ZZZZZ,ZZZ,z作为时区,但无法正常工作
怎么了?谢谢。
将日期隐藏为新格式:
formatDate("2018-08-21T10:12:06.872722+00:00");
public static String formatDate(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz");
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd");
Date d;
try {
d = sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
return "";
}
return output.format(d);
}
答案 0 :(得分:1)
您正在使用的 SimpleDateFormat 类现在是旧版,应该由java.time类进行补充。而且它也不是线程安全的。
因此,如果您使用的是Java 8或更高版本,请使用以下示例代码:
public static void main(String[] args) {
String date = "2018-08-21T10:12:06.872222+00:00";
LocalDateTime parsedDate = LocalDateTime.parse(date, java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSz"));
System.out.println(parsedDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}
如果您坚持使用SimpleDateFormat类,请按照@Prateek的回答进行操作。
答案 1 :(得分:1)
在Java 8或更高版本中,您可以使用 单行 代码达到与以下相同的效果:
System.out.println(OffsetDateTime.parse("2018-08-21T10:12:06.872722+00:00",
DateTimeFormatter.ISO_OFFSET_DATE_TIME).toLocalDate());
输出:
2018-08-21
答案 2 :(得分:0)
您的模式根本不与输入字符串相对应...它不起作用也就不足为奇了。这样可能会更好:
SimpleDateFormat sdf = new SimpleDateFormat("EE MMM dd HH:mm:ss z yyyy",
Locale.ENGLISH);
然后以所需的格式打印,您需要第二个SimpleDateFormat:
Date parsedDate = sdf.parse(date);
SimpleDateFormat print = new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
System.out.println(print.format(parsedDate)
答案 3 :(得分:0)
您可以调用此方法。
void checkDateParsing()
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ");
Date d = null;
try {
d = sdf.parse("2018-08-21T10:12:06.872722+00:00");
} catch (ParseException e) {
e.printStackTrace();
}
Log.e("date",d.toGMTString());
}
答案 4 :(得分:0)
public class test1 {
public static void main(String[] args) {
System.out.println(formatDate("2018-08-21-10:12:06.872+0100"));
}
public static String formatDate(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss.SSSZ");
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd");
Date d;
try {
d = sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
return "";
}
return output.format(d);
}