2017-02-17 22 views
0

у меня есть:Java GetTime() возвращает нуль из отформатированной строки

String stringDate = "2017-02-16T15:00:00Z" 

Я хочу, чтобы преобразовать это в дату и после этого я хочу, чтобы быть преобразованы в Лонг. Вот мой код:

private void normalizeDate(ContentValues values) { 
    // normalize the date value 
    if (values.containsKey(SmogContract.MeasurementEntry.COLUMN_FROM_DATE_TIME)) { 
     Date date = convertDateFromStringToDate(values.getAsString(SmogContract.MeasurementEntry.COLUMN_FROM_DATE_TIME)); 
     long fromDateValue = date.getTime(); 
     values.put(SmogContract.MeasurementEntry.COLUMN_FROM_DATE_TIME, SmogContract.normalizeDate(fromDateValue)); 
    } 
    if (values.containsKey(SmogContract.MeasurementEntry.COLUMN_TILL_DATE_TIME)) { 
     long fromDateValue = values.getAsLong(SmogContract.MeasurementEntry.COLUMN_TILL_DATE_TIME); 
     values.put(SmogContract.MeasurementEntry.COLUMN_TILL_DATE_TIME, SmogContract.normalizeDate(fromDateValue)); 
    } 
} 

private Date convertDateFromStringToDate(String stringDate){ 
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 
    format.setTimeZone(TimeZone.getTimeZone("GMT")); 
    Date convertedFromStringDate = null; 
    try { 
     convertedFromStringDate = format.parse(stringDate); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    return convertedFromStringDate; 
} 

Вот исключение, которое я получаю:

java.lang.NullPointerException: Attempt to invoke virtual method 'long java.lang.Long.longValue()' on a null object reference 
       at com.example.marcin.smog_mapa.data.SmogProvider.normalizeDate(SmogProvider.java:109) 
       at com.example.marcin.smog_mapa.data.SmogProvider.insert(SmogProvider.java:85) 
       at android.content.ContentProvider$Transport.insert(ContentProvider.java:263) 
       at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:163) 
       at android.os.Binder.execTransact(Binder.java:453) 
+0

Пожалуйста, взгляните на консоль. Сюрприз !!! –

+1

http://stackoverflow.com/questions/19112357/java-simpledateformatyyyy-mm-ddthhmmssz-gives-timezone-asistist – Laazo

+1

Возможный дубликат [Java SimpleDateFormat ("yyyy-MM-dd'T'HH: mm: ss 'Z' ") указывает часовой пояс как IST] (http://stackoverflow.com/questions/19112357/java-simpledateformatyyyy-mm-ddthhmmssz-gives-timezone-asistist) – RamPrakash

ответ

0

format.parse(...) заявление терпит неудачу с ParseException, оставляя convertedFromStringDate на null. Проверьте свою консоль на трассировку стека и убедитесь, что stringDate имеет правильный формат.

+0

Это строка, которую я получаю от ответа API – wegtis

0

ОК, так что это была глупая ошибка в методе.

Вот это сделано правильно:

private void normalizeDate(ContentValues values) { 
    // normalize the date value 
    if (values.containsKey(SmogContract.MeasurementEntry.COLUMN_FROM_DATE_TIME)) { 
     Date date = convertDateFromStringToDate(values.getAsString(SmogContract.MeasurementEntry.COLUMN_FROM_DATE_TIME)); 
     Log.d("ConvertedDate: ", String.valueOf(date.getTime())); 
     long fromDateValue = date.getTime(); 
     values.put(SmogContract.MeasurementEntry.COLUMN_FROM_DATE_TIME, SmogContract.normalizeDate(fromDateValue)); 
    } 
    if (values.containsKey(SmogContract.MeasurementEntry.COLUMN_TILL_DATE_TIME)) { 
     Date date = convertDateFromStringToDate(values.getAsString(SmogContract.MeasurementEntry.COLUMN_TILL_DATE_TIME)); 
     Log.d("ConvertedDate: ", String.valueOf(date.getTime())); 
     long fromDateValue = date.getTime(); 
     values.put(SmogContract.MeasurementEntry.COLUMN_TILL_DATE_TIME, SmogContract.normalizeDate(fromDateValue)); 
    } 
} 
0

Проблема приходит из

long fromDateValue = values.getAsLong(SmogContract.MeasurementEntry.COLUMN_TILL_DATE_TIME); 

values Где это ContentValues экземпляра.

ContentValues.getAsLong Вернуть null, что вы храните в long, поэтому его называют Long.longValue() ведущих к этому NullPointerException

Это риск с этим авто-бокс/распаковка, если у вас есть

Long wrap_long = null; 
long l = wrap_long; 

Это будет собираться, но будет бросать NPE во время выполнения, где

long l = null; 

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

Полезно проверить значение Long значение null при его освобождении.