我已经看到了许多不同的JSON日期格式标准:
"\"\\/Date(1335205592410)\\/\"" .NET JavaScriptSerializer
"\"\\/Date(1335205592410-0500)\\/\"" .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z" JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00" ISO 8601
Run Code Online (Sandbox Code Playgroud)
哪一个是正确的?还是最好的?这有什么标准吗?
我正在添加这个问题,因为我是Java和Android的新手,我搜索了几个小时试图解决这个问题.答案来自相关答案的组合,所以我想我会记录我为其他可能正在努力的人学到的东西.见答案.
对于一些背景知识,我的经验主要是PHP的Web开发和一点Ruby.我唯一的操作系统是Linux(Ubuntu Studio),我(不情愿地)在Android Studio 2.1.2中开发我的第一个Android应用程序.我的Java设置如下:
>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Run Code Online (Sandbox Code Playgroud) datetime android android-gradle-plugin threetenbp threetenabp
我有一个日期字符串,我想解析它到正常日期使用java Date API,以下是我的代码:
public static void main(String[] args) {
String date="2010-10-02T12:23:23Z";
String pattern="yyyy-MM-ddThh:mm:ssZ";
SimpleDateFormat sdf=new SimpleDateFormat(pattern);
try {
Date d=sdf.parse(date);
System.out.println(d.getYear());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我有一个例外: java.lang.IllegalArgumentException: Illegal pattern character 'T'
所以我想知道我是否必须拆分字符串并手动解析它?
顺便说一句,我试图在T的两边添加单引号字符:
String pattern="yyyy-MM-dd'T'hh:mm:ssZ";
Run Code Online (Sandbox Code Playgroud)
它也行不通.
我试图解析一个看起来像这样的日期:
yyyy-MM-dd'T'HH:mm:ss
Run Code Online (Sandbox Code Playgroud)
这是http://www.ietf.org/rfc/rfc3339.txt的有效日期."Z"字面意思"暗示UTC是指定时间内的首选参考点."
如果我尝试使用SimpleDateFormat和此模式解析它:
yyyy-MM-dd'T'HH:mm:ssz
yyyy-MM-dd'T'HH:mm:ssZ
Run Code Online (Sandbox Code Playgroud)
它将被解析为2010年4月5日17:16:00美国东部时间2010年
SimpleDateFormat无法使用以下模式解析字符串:
yyyy-MM-dd'T'HH:mm:ss
Run Code Online (Sandbox Code Playgroud)
我可以显式设置TimeZone在SimpleDateFormat上使用以获得预期的输出,但我不认为这是必要的.有什么我想念的吗?有替代日期解析器吗?
我很感激找到这个例外的bug的任何帮助:
java.text.ParseException: Unparseable date: "2007-09-25T15:40:51.0000000Z"
Run Code Online (Sandbox Code Playgroud)
以下代码:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = sdf.parse(timeValue);
long mills = date.getTime();
this.point.time = String.valueOf(mills);
Run Code Online (Sandbox Code Playgroud)
它抛出了暴力Date date = sdf.parse(timeValue);.
timeValue = "2007-09-25T15:40:51.0000000Z"; ,例如.
谢谢.
我正在尝试通过Parse的REST API在我的Parse.com数据库中使用HttpsUrlConnection创建一个新对象.他们的REST API只接受JSON.我已经完成了所有工作,数据库将接受新的对象条目 - 除了我尝试包含Date字段时.当我传入日期时,服务器完全拒绝该对象.
我在他们的文档中找到了这个描述,用于在使用REST API时如何在对象中添加Date字段:
Parse移动客户端库还支持日期,二进制数据和关系数据.在REST API中,这些值被编码为JSON哈希值,并且__type字段设置为指示其类型,因此如果使用正确的编码,则可以读取或写入这些字段.
Date类型包含一个字段iso,其中包含以ISO 8601格式存储的UTC时间戳,精度为毫秒级:YYYY-MM-DDTHH:MM:SS.MMMZ.
{
"__type": "Date",
"iso": "2011-08-21T18:02:52.249Z"
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我想创建一个新对象并将其传递给数据库,我假设我需要创建另一个JSONObject并将其传递到相应的字段中.然而,当我尝试时,它仍然拒绝它.下面是我尝试将Date对象添加为要传递的参数,存储在自己的JSONObject中.我究竟做错了什么?基于文档在JSON中发送Date对象的正确方法是什么?
//datePicked is a Calendar object
Date sendTime = datePicked.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String sendTimeInUTC = formatter.format(sendTime);
//Storing the Date object as a JSONObject, as specified
JSONObject dateAsObj = new JSONObject();
dateAsObj.put("__type", "Date");
dateAsObj.put("iso", sendTimeInUTC);
//jsonParam is the JSONObject that is being sent over to Parse's REST API
jsonParam.put("sendTime", dateAsObj);
Run Code Online (Sandbox Code Playgroud)
这是完整的函数,它产生http请求,用于上下文和引用:
private void runHttpRequest(final String emailAddress, final String password, …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
String ModifiedDate = "1993-06-08T18:27:02.000Z" ;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date ModDate = sdf.parse(ModifiedDate);
Run Code Online (Sandbox Code Playgroud)
即使我的日期格式很好,我也得到以下异常...
java.text.ParseException: Unparseable date: "1993-06-08T18:27:02.000Z"
at java.text.DateFormat.parse(DateFormat.java:337)
Run Code Online (Sandbox Code Playgroud) LocalDateTime API允许通过使用格式化程序中的键“ z”来添加TimeZone名称。添加此密钥时出现异常,不明白为什么。我正在寻找类似此示例的内容11:59:22 PM GMT,而不是“ **... UMT+2**”。
我的代码:
public class TimeZone
{
public static void main(String[] args)
{
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm:ss a z");
System.out.println(now.format(formatter));
}
}
Run Code Online (Sandbox Code Playgroud)
例外:
Exception in thread "main" java.time.DateTimeException: Unable to extract value: class java.time.LocalDateTime
at java.time.format.DateTimePrintContext.getValue(Unknown Source)
at java.time.format.DateTimeFormatterBuilder$ZoneTextPrinterParser.format(Unknown Source)
at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(Unknown Source)
at java.time.format.DateTimeFormatter.formatTo(Unknown Source)
at java.time.format.DateTimeFormatter.format(Unknown Source)
at java.time.LocalDateTime.format(Unknown Source)
at tz.TimeZone.main(TimeZone.java:12)
Run Code Online (Sandbox Code Playgroud)
这是DateTimeFormatter API部分:
All letters 'A' to 'Z' and 'a' to 'z' are reserved as …Run Code Online (Sandbox Code Playgroud) 我有一个带有 @JsonFormat 的 LocalDateTime 字段
@JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'")
private LocalDateTime dateTime;
Run Code Online (Sandbox Code Playgroud)
当 Jackson 尝试解析像2018-11-28T15:24:00.000Z这样的日期时,会抛出异常
com.fasterxml.jackson.databind.JsonMappingException:无法构造 java.time.LocalDateTime 的实例:没有字符串参数构造函数/工厂方法来从字符串值反序列化('2018-11-28T15:24:00.000Z')
在我的 pom.xml 中我有:
我的 ObjectMapper Bean:
@Bean
public ObjectMapper postConstruct() {
return this.builder
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.defaultUseWrapper(false)
.build();
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
@JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'", timezone ="UTC")
private LocalDateTime dateTime;
Run Code Online (Sandbox Code Playgroud) 我需要 java 类中 2022-10-03T19:45:47.844Z 格式的当前系统日期和时间。
我尝试使用 zoneddatetime 和简单日期格式,但无法从在线获取写入语法或代码。我是 Java 初学者,非常感谢任何帮助。谢谢。
java iso8601 datetime-format simpledateformat offsetdatetime
java ×8
datetime ×4
date ×3
iso8601 ×3
parsing ×3
json ×2
android ×1
exception ×1
jackson ×1
javascript ×1
jsonobject ×1
spring-boot ×1
threetenabp ×1
threetenbp ×1
timezone ×1