2016-02-01 4 views
0

я должен разобрать эту две датус датой поддается синтаксическим анализом временной зоны

private static final String d1 = "2013­-04­-02T08:37:56Z"; 
private static final String d2 = "2013-­04-­02T10:37:56+02:00"; 

для первого я использую шаблон

"yyyy-MM-dd'T'HH:mm:ss'Z'" 

и для второго я использую

"yyyy-MM-dd'T'HH:mm:ssXXX" 

, но я всегда получаю

java.text.ParseException: Unparseable date: .... 

здесь мой тестовый код:

private static final String d1 = "2013-­04­-02T08:37:56Z"; 
private static final String d2 = "2013-­04­-02T10:37:56+02:00"; 

private static final String DATE_FORMAT_WITH_TIMEZONE = "yyyy-MM-dd'T'HH:mm:ss'Z'"; 
private static final String DATE_FORMAT_WITH_TIMEZONE2 = "yyyy-MM-dd'T'HH:mm:ssXXX"; 

public static void main(String[] args) { 
    try { 
     SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT_WITH_TIMEZONE); 

     Date d = df.parse(d1); 
     System.out.println("d1 = " + d); 

     df = new SimpleDateFormat(DATE_FORMAT_WITH_TIMEZONE2); 
     df.setTimeZone(TimeZone.getTimeZone("Europe/Rome")); 
     Date dt = df.parse(d2); 
     System.out.println("d2 = " + dt); 
    } catch (ParseException ex) { 
     ex.printStackTrace(); 
    } 
} 

Что плохого в моем коде?

+1

Удалить символ «-» в вашем формате – Jerry06

+0

Я не знаю, почему минус был удален, копируя код ... но у меня есть ... я отредактировал и исправил его – Andrea

ответ

2

Вашего DateFormat Определение неправильно:

private static final String DATE_FORMAT_WITH_TIMEZONE = "yyyyMMdd'T'HH:mm:ss'Z'"; 
private static final String DATE_FORMAT_WITH_TIMEZONE2 = "yyyyMMdd'T'HH:mm:ssXXX"; 

Там нет знака минус в строке

UPDATE: После обновления на ваш вопрос, я думаю, что - знак не минус знак. Это только выглядит так. Замените эти знаки. и попробуй еще раз.

+0

Привет, jens, я не знаю почему минус был удален, копируя код ... но у меня есть ... я отредактировал и скорректировал его – Andrea

+0

@Andrea См. мой обновленный ответ. – Jens

+0

Привет, Йенс ... это было ... возможно, копия и прошлое из исходного кода в мой код использует символ, который был как минус, но не он. Большое спасибо – Andrea

0

Измените свой Formatter следующим образом.

private static final String DATE_FORMAT_WITH_TIMEZONE = "yyyyMMdd'T'HH:mm:ss'Z'"; 
private static final String DATE_FORMAT_WITH_TIMEZONE2 = "yyyyMMdd'T'HH:mm:ssXXX"; 

Однако я бы рекомендовал использовать JodaTime для этой цели. JodaTime имеет лучшие функции. Использование JodaTime вы можете сделать что-то вроде этого:

DateTimeFormatter df = DateTimeFormat.forPattern("yyyyMMdd'T'HH:mm:ss'Z'"); 
DateTime dateTime = df.parseDateTime("2013­-04­-02T08:37:56Z"); 
Date date = dateTime.toDate(); 
+0

Я получаю ошибку форматирования одинаково – Andrea

0

После преобразования ваших примеров в Hex, кажется, что вы не используете обычный дефис (0x2D), но подобный характер (0xC2AD в соответствии с моим блокнотом ++ конвертера) называется «мягкий дефис ».