将从mongo返回的日期转换为此格式2015-10-25

时间:2015-01-06 17:24:12

标签: java mongodb-query mongodb-java

我有一个从mongo db返回的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,但我相信会有更好的方法。有人有任何想法吗?

更新:

以下是答案:

converting date from one format to another does not work

非常感谢帮助

3 个答案:

答案 0 :(得分:3)

您可以使用此方法来解析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 "";
}

答案 1 :(得分:1)

为什么不使用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为如何解析和格式化日期提供了一些很好的解读。类DateTimeFormatter可用于Java 8,如果您使用的是旧版本的Java,则可以使用类SimpleDateFormat(它使用类似的策略来处理日期,但遗憾的是不是线程安全的)。

编辑:在OP

输入后更新了格式化程序

答案 2 :(得分:0)

我建议你做以下的事情。

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);