我必须获得格式为 {"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;
感谢您的帮助!
最佳答案
这里有两处需要更改。首先是格式。
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 个前导零!这是您的情况下唯一可能的解决方法!
编辑:-
SimpleDateFormat
Android 不包含 X
。它提供 Z
代替。因此,您的新格式字符串将是
yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZZZZ
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZZZZ"); // For Android
关于c# - 类似于 C# 的 Java SimpleDateFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18825131/