2017-04-20 73 views
-1

当我运行下面的代码将时间字符串转换为Java日期时,它失败。如何在Java中使用偏移时间简单日期格式

String s = "04/17/2017 06:46:53 -600"; 
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss Z"); 
Date value = format.parse(s); 

Exception in thread "main" java.text.ParseException: Unparseable date: "04/17/2017 06:46:53 -600" 
    at java.text.DateFormat.parse(Unknown Source) 

什么是用于将日期字符串转换为java日期的正确格式字符串?

+6

可能需要'-0600'不'-600' – AxelH

+0

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#rfc822timezone – 1615903

+0

请参阅http:// stackoverflow.com/questions/9541043/java-convert-string-to-date-in-with-time-zone-variable?rq=1 – 2017-04-20 11:48:15

回答

2

添加-0600代替-600 read link

import java.text.*; 
import java.util.*; 
class TestFormatDate { 


public static void main(String arg[]) throws Exception{ 

String s = "04/17/2017 06:46:53 -0600"; 
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss Z"); 
Date value = format.parse(s); 
System.out.println("value "+value); 
} 
} 
2

作为SimpleDateFormat time zone documentation解释:

RFC 822时区:对于格式化,在RFC 822的4位时区格式被用于:

RFC822TimeZone: 
     Sign TwoDigitHours Minutes 
TwoDigitHours: 
     Digit Digit 

ISO 8601时区:模式字母的数量指定格式化和解析的格式,如下所示:

ISO8601TimeZone: 
     OneLetterISO8601TimeZone 
     TwoLetterISO8601TimeZone 
     ThreeLetterISO8601TimeZone 
    OneLetterISO8601TimeZone: 
     Sign TwoDigitHours 
     Z 
    TwoLetterISO8601TimeZone: 
     Sign TwoDigitHours Minutes 
     Z 
    ThreeLetterISO8601TimeZone: 
     Sign TwoDigitHours : Minutes 
     Z 

时间总是看到两个数字,所以你需要通过-0600作为一个时区或-06

只有这样,你可以有一个数的小时数是:

一般时区:如果时区具有名称,则将其解释为文本。对于表示GMT偏移值的时区时,使用的语法如下:

GMTOffsetTimeZone: 
     GMT Sign Hours : Minutes 
Sign: one of 
     + - 
Hours: 
     Digit 
     Digit Digit 
Minutes: 
     Digit Digit 
Digit: one of 
     0 1 2 3 4 5 6 7 8 9 
0

尝试,

String s = "04/17/2017 06:46:53 -0600"; 

请仔细阅读this检查如何使用“Z”。