这是我的日期字符串,
String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";
我只想获取格式为“yyyy-MM-dd”的日期。 我怎样才能得到这种格式的日期。 我尝试使用以下代码,但它不起作用。
String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";
Date date = null;
try {
date = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss Z").parse(dd);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String newstr = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println("\n"+newstr+"\n");
最佳答案
java.time
使用现代 Java 日期和时间 API java.time,如果您知道如何操作,这将非常简单:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"MMM-dd-uuuu HH:mm:ss.SSS zzz(xx)", Locale.ROOT);
String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";
LocalDate date = LocalDate.parse(dd, formatter);
System.out.println(date);
输出是:
2019-11-08
如我们所见,您的字符串采用 UTC 格式。我假设您还想要 UTC 日期。如果不是,我们需要解析成 ZonedDateTime
,转换成您想要的区域,然后格式化成您想要的输出格式,只有日期。
我假设 UTC(+0000)
是时区缩写,后跟括号中的偏移量。
您尝试使用的日期和时间类 Date
和 SimpleDateFormat
设计不佳且早已过时,后者尤其麻烦。你不应该使用它们。 java.time 非常有用。
你的代码出了什么问题?
MM
代表两位数的月份,例如 11 代表十一月或 08 代表八月。对于像Nov
这样的月份缩写,您需要MMM
。Z
用于偏移,如+0000
。虽然这确实出现在您的字符串中,但文本UTC
出现在它之前。编辑:令人困惑的SimpleDateFormat
将UTC
解析为时区,然后忽略字符串的其余部分。就我而言,我不应该依赖这种行为。- 我建议您为格式化程序指定一个语言环境,以控制它希望在字符串中使用哪种语言。使用
MMM
表示月份缩写,如果您依赖默认语言环境并且它恰好是威尔士语,则您的格式化程序将期望使用Tach
表示 11 月。
链接
- > Oracle tutorial: Date Time解释如何使用 java.time。
- 相关问题:Why can't this SimpleDateFormat parse this date string?
关于java - 如何在java中从日期时间获取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58849227/