将从 mongo 返回的日期转换为这种格式 2015-10-25
Converting the date returned from mongo to this format 2015-10-25
我有一个从 mongo 数据库返回的 json 文件,如下所示:
[
{
"_id": {
"$date": "2014-10-19T04:00:00.000Z"
},
"value": 29
},
{
"_id": {
"$date": "2014-10-20T04:00:00.000Z"
},
"value": 20
},
{
"_id": {
"$date": "2014-10-21T04:00:00.000Z"
},
"value": 21
}
]
现在我想按以下格式读取 java 中的日期:2014/10/25
但是当我使用时:
System.out.println("DAte is : "+result.get("_id").toString() );
结果是:
DAte is : Sun Oct 19 01:00:00 ADT 2014
然后我想到的唯一一件事就是使用子字符串并手动将日期转换为 2014-10-25,但我相信会有更好的方法。有人知道吗?
更新:
这是答案:
非常感谢您的帮助
你为什么不用DateTimeFormatter
?然后你可以这样解析你的日期:
// The test string
String str = "Sun Oct 19 01:00:00 ADT 2014";
// Formatter for the input date
final DateTimeFormatter inputFormat =
DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
// The parsed date
final ZonedDateTime parsed = ZonedDateTime.parse(str, inputFormat);
// The output format(s). Specify the one you need
final DateTimeFormatter outputFormat1 = DateTimeFormatter.ofPattern("yyyy/MM/dd");
final DateTimeFormatter outputFormat2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// Print
System.out.println(outputFormat1.format(parsed)); // -> 2014/10/19
System.out.println(outputFormat2.format(parsed)); // -> 2014-10-19
这篇 article 提供了一些关于如何解析和格式化日期的好读物。 class DateTimeFormatter
可用于 Java 8,如果您使用的是旧版本的 Java,则可以使用 class SimpleDateFormat
(它使用类似的策略来处理日期,但不幸的是它不是线程安全的。
编辑:从 OP
输入后更新格式化程序
我建议您执行以下操作。
SimpleDateFormat original = new SimpleDateFormat("yyyy-MM-ddThh:mm:sssZ");
SimpleDateFormat output= new SimpleDateFormat("yyyy/MM/dd");
String isoFormat = original.format(result.get("_id"));
Date d = original.parse(isoFormat);
String formattedTime = output.format(d);
System.out.println(formattedTime);
您可以使用此方法解析 mongo 日期格式。但在这里我们忽略了时区。因此,如果时区无关紧要,请使用它。
private static String convertMongoDate(String val){
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
SimpleDateFormat outputFormat= new SimpleDateFormat("yyyy/MM/dd");
try {
String finalStr = outputFormat.format(inputFormat.parse(val));
System.out.println(finalStr);
return finalStr;
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}
我有一个从 mongo 数据库返回的 json 文件,如下所示:
[
{
"_id": {
"$date": "2014-10-19T04:00:00.000Z"
},
"value": 29
},
{
"_id": {
"$date": "2014-10-20T04:00:00.000Z"
},
"value": 20
},
{
"_id": {
"$date": "2014-10-21T04:00:00.000Z"
},
"value": 21
}
]
现在我想按以下格式读取 java 中的日期:2014/10/25
但是当我使用时:
System.out.println("DAte is : "+result.get("_id").toString() );
结果是:
DAte is : Sun Oct 19 01:00:00 ADT 2014
然后我想到的唯一一件事就是使用子字符串并手动将日期转换为 2014-10-25,但我相信会有更好的方法。有人知道吗?
更新:
这是答案:
非常感谢您的帮助
你为什么不用DateTimeFormatter
?然后你可以这样解析你的日期:
// The test string
String str = "Sun Oct 19 01:00:00 ADT 2014";
// Formatter for the input date
final DateTimeFormatter inputFormat =
DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
// The parsed date
final ZonedDateTime parsed = ZonedDateTime.parse(str, inputFormat);
// The output format(s). Specify the one you need
final DateTimeFormatter outputFormat1 = DateTimeFormatter.ofPattern("yyyy/MM/dd");
final DateTimeFormatter outputFormat2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// Print
System.out.println(outputFormat1.format(parsed)); // -> 2014/10/19
System.out.println(outputFormat2.format(parsed)); // -> 2014-10-19
这篇 article 提供了一些关于如何解析和格式化日期的好读物。 class DateTimeFormatter
可用于 Java 8,如果您使用的是旧版本的 Java,则可以使用 class SimpleDateFormat
(它使用类似的策略来处理日期,但不幸的是它不是线程安全的。
编辑:从 OP
输入后更新格式化程序我建议您执行以下操作。
SimpleDateFormat original = new SimpleDateFormat("yyyy-MM-ddThh:mm:sssZ");
SimpleDateFormat output= new SimpleDateFormat("yyyy/MM/dd");
String isoFormat = original.format(result.get("_id"));
Date d = original.parse(isoFormat);
String formattedTime = output.format(d);
System.out.println(formattedTime);
您可以使用此方法解析 mongo 日期格式。但在这里我们忽略了时区。因此,如果时区无关紧要,请使用它。
private static String convertMongoDate(String val){
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
SimpleDateFormat outputFormat= new SimpleDateFormat("yyyy/MM/dd");
try {
String finalStr = outputFormat.format(inputFormat.parse(val));
System.out.println(finalStr);
return finalStr;
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}