Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.text.Parse异常:不可解析的日期_Java_Parsing_Date_Iso8601 - Fatal编程技术网

java.text.Parse异常:不可解析的日期

java.text.Parse异常:不可解析的日期,java,parsing,date,iso8601,Java,Parsing,Date,Iso8601,我有以下代码: 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); 我得到以下例外,即使我的日期格式是好的 java.text.ParseException: Unparseable date: "19

我有以下代码:

  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);
我得到以下例外,即使我的日期格式是好的

java.text.ParseException: Unparseable date: "1993-06-08T18:27:02.000Z"
at java.text.DateFormat.parse(DateFormat.java:337)

后者的
Z
模式表示RFC 822时区。你的绳子

String ModifiedDate = "1993-06-08T18:27:02.000Z" ;  
不包含这样的时区。它包含一个
Z

您将需要一个日期模式,它类似于literal
T
,具有literal
Z

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
如果您想让
Z
指示祖鲁时间,请在构建
SimpleDateFormat

sdf.setTimeZone(TimeZone.getTimeZone("Zulu"));;
答案是正确的。
Z
表示祖鲁时间,与UTC(+00:00)的零偏移。换句话说,不调整到任何时区

乔达时间 仅供参考,图书馆使这项工作更容易,新的图书馆也是如此

您使用的格式由标准定义。默认情况下,Joda Time和java.Time都解析并生成ISO 8601字符串

Joda Time中的DateTime知道自己指定的时区。因此,作为解析过程的一部分,指定要调整的时区

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTime = new DateTime( "1993-06-08T18:27:02.000Z", timeZone );
String output = dateTime.toString();
如果需要,可以保留DateTime对象

DateTime dateTime = new DateTime( "1993-06-08T18:27:02.000Z", DateTimeZone.UTC );
当其他类需要时,可以生成java.util.Date对象

java.util.Date date = dateTime.toDate();

尝试单引号'Z'SimpleDateFormat sdf=newsimpledateformat(“yyyy-MM-dd'T'HH:MM:ss.SSS'Z'”);是否要使用ISODateTimeFormat(在joda中)?对于ISO8601标准可能更好。请参见我将添加更改
ModifiedDate
以获取时区差异,例如'2001-07-04T12:08:56.235-0700'@gtgaxiola绝对,如果OP可以更改其输入字符串,那么这样做可能更容易。