Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 Dateformat赢得';t解析字符串_Java_Date_Date Format_Simpledateformat - Fatal编程技术网

Java Dateformat赢得';t解析字符串

Java Dateformat赢得';t解析字符串,java,date,date-format,simpledateformat,Java,Date,Date Format,Simpledateformat,我试图解析一个表示为字符串的日期。字符串的示例如下:20150724T104139.118+02 下面是解析代码: DateFormat formatter = new SimpleDateFormat(timestampFormat); return formatter.parse("yyyyMMdd'T'HHmmss'.'SX"); 这会引发错误: java.text.ParseException: Unparseable date: "20150724T104139.118+02" at

我试图解析一个表示为字符串的日期。字符串的示例如下:
20150724T104139.118+02

下面是解析代码:

DateFormat formatter = new SimpleDateFormat(timestampFormat);
return formatter.parse("yyyyMMdd'T'HHmmss'.'SX");
这会引发错误:

java.text.ParseException: Unparseable date: "20150724T104139.118+02"
at java.text.DateFormat.parse(DateFormat.java:366)
at 

模式与我在将日期转换为该字符串时使用的模式相同。

parse
期望的是日期,而不是模式:

new SimpleDateFormat(datePattern).parse(dateToParse)

首先,您错误地交换了
SimpleDateFormat
字符串和要从中解析日期的字符串。此外,格式字符串与示例日期不匹配。您需要在毫秒内执行三次
S
。请尝试以下操作:

String text = "20150724T104139.118+02";
DateFormat formatter = new SimpleDateFormat("yyyyMMdd'T'HHmmss'.'SSSX");
Date myTime = formatter.parse(text);
您可以这样尝试:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'.'sssX");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));  //Set the timezone as per your env if you want
sdf.parse("yourDate"); 
tl;博士 只要您使用的是
SimpleDateFormat
您的模式,
yyyyMMdd'HHmmss.'SX
就没有问题

顺便说一句,您不需要将
括在(单)引号内,也就是说,您可以简单地使用
yyyyMMdd'HHmmss.SX

那有什么问题? 问题是您正在将模式而不是日期时间字符串传递给。使用您的模式,以下代码将成功运行:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) throws ParseException {
        DateFormat formatter = new SimpleDateFormat("yyyyMMdd'T'HHmmss'.'SX");
        Date date = formatter.parse("20150724T104139.118+02");
        // ...
    }
}
更多证据证明用于解析的
SimpleDateFormat
模式没有任何错误

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        DateFormat formatter = new SimpleDateFormat("yyyyMMdd'T'HHmmss'.'SX");
        Date date = formatter.parse("20150724T104139.118+02");

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'.'SSSX");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+02"));
        System.out.println(sdf.format(date));
    }
}
输出:

20150724T104139.118+02
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuuMMdd'T'HHmmss.SSSX", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("20150724T104139.118+02", dtf);
        System.out.println(odt);
    }
}
2015-07-24T10:41:39.118+02:00
java.time 请注意,传统的日期时间API(
java.util
date-time类型及其格式化API,
SimpleDateFormat
)已经过时,并且容易出错。建议完全停止使用它,并切换到
java.time
,即*

使用现代日期时间API的演示:

20150724T104139.118+02
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuuMMdd'T'HHmmss.SSSX", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("20150724T104139.118+02", dtf);
        System.out.println(odt);
    }
}
2015-07-24T10:41:39.118+02:00
输出:

20150724T104139.118+02
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuuMMdd'T'HHmmss.SSSX", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("20150724T104139.118+02", dtf);
        System.out.println(odt);
    }
}
2015-07-24T10:41:39.118+02:00
如果您需要此对象的
OffsetDateTime
中的
java.util.Date
对象,您可以按如下操作:

Date date = Date.from(odt.toInstant());
了解有关*的更多信息


*无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。

谢谢,单S是错误,在复制问题代码时发生了字符串交换(我简化了一点),这在原文中是正确的。