1

我必须以这种格式获得今天的日期{"Date":"2013-09-11T14:47:57.8895887+02:00"}。这是因为我的 Json 服务是针对 Windows Phone 和 C# 代码进行研究的。

我试过这种方法:

public static Date getTodayDate() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "yyyy-MM-dd'T'HH:mm:ss.SSSZ:Z");
    Date date = new Date();
    String dateString = dateFormat.format(date);
    Date today = parseFromNormalStringToDate(dateString);
    return today;
}

但我得到了这个回报

2013-09-16T11:47:55.235+0200:+0200;

谢谢您的帮助!

4

2 回答 2

1

这里有两件事要改变。先说格式。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX"); // This should work for you. Though I must say 6 "S" is not done. You won't get milliseconds for 6 precisions.
Date date = new Date();
String dateString = dateFormat.format(date); // You need to use "dateString" for your JSON

第二件事,格式化日期是您需要放入 JSON 而不是将其解析回Date. 但Date没有格式化选项。您只能使用 SDF 以您需要的格式获取日期的字符串表示形式。

前任:-

public static void main(String[] args) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX");
    Date date = new Date();
    String dateString = dateFormat.format(date); // You need to use "dateString" for your JSON
    System.out.println(dateString); // Output
}

这个输出是

2013-09-16T15:39:16.000257+05:30

以毫秒为单位的 6 位精度是不可能的。如果您在 Java 7 中看到 SDF 的文档,您可以找到以下内容:-

在此处输入图像描述

突出显示的示例是您需要的示例,但精度为 6 毫秒,这是不可能的。因此,您可以使用 6 S,但它只会在实际的 3 毫秒数字之前添加 3 个前导零!在您的情况下,这是唯一可能的解决方法!

编辑:-

Android的SimpleDateFormat不包含X. Z相反,它提供了。因此,您的新格式字符串将是

yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZZZZ

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZZZZ"); // For Android
于 2013-09-16T10:05:44.983 回答
0

问题在于“Z:Z”尝试“X”这个代替:

public static Date getTodayDate() {
    SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSX");
    Date date = new Date();
    String dateString = dateFormat.format(date);
    Date today = parseFromNormalStringToDate(dateString);
    return today;
}
于 2013-09-16T09:59:00.623 回答