2015-06-23 6 views
-3

Я пытаюсь преобразовать NSString в NSDate, как показано ниже.Преобразование NSString в NSDate

Значение NSString *startTime является 2015-06-23T01: 37: 53Z,
но значение NSDate *startTimeDate является нулевым . Что не так с кодом?

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"PST"]]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
NSDate *startTimeDate = [dateFormatter dateFromString:startTime]; 
+4

Просто удалите '.SSS' из вашего формата. Надеюсь, тогда это сработает. – VRAwesome

ответ

4

проверить ваш формат даты

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 

изменения в

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 

Swift

проверить формат даты

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 

изменения в

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 
+0

Это неверно. Не указывайте 'Z' в строке формата. – rmaddy

0

Его простой, преобразование NSString в NSDate мы используем NSDateformatter используя dateFromString метод. Мы должны обеспечить NSDateFormatter стиль с существующим стилем для NSString

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
NSDate *date = [dateFormatter dateFromString:@"2013-02-01T06:25:47Z"]; 
NSTimeZone *pdt = [NSTimeZone timeZoneWithAbbreviation:@"PDT"]; 
[dateFormatter setTimeZone:pdt]; 
[dateFormatter setDateFormat:@"HH:mm:ss zzz"]; 
[dateFormatter setDateFormat:@"K:mm a, z"]; 
NSString * updated String = [dateFormatter stringFromDate:date]; 
+0

@AshishKakkad вы на самом деле испортили, что эти люди немного подвели ответ, я исправился. Однако «Бхумика» все еще остается опечаткой на нижней строке. – Popeye

+0

@Popeye OK, спасибо за точный –

+0

@AshishKakkad Это была не огромная проблема, просто опечатка, на мой взгляд, они случаются. Счастливое кодирование. – Popeye

1

вы начальный промежуток указанный не имеет миллисекунды, так что вы хотите использовать DateFormat из:

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 

Если вы хотите поддержать оба стиля строк даты XML, я рекомендую создать два экземпляра NSDateFormatter для обоих форматов даты, а также попробовать другое, если вы получите нуль от первого.

+0

Это неверно. Не указывайте 'Z' в строке формата. – rmaddy

+0

@rmaddy good pickup, я удалил это из формата – SomeGuy

1

Есть по крайней мере, 2 номера с вашим форматом дата:

  • .SSS используется для чтения миллисекунды, но переменная startTime не содержит значение миллисекунды;

  • Z представляют GMT часовой пояс и не должны быть экранированы в формате dateFormat.

Давайте попробуем исправить этот ussues:

 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
    NSDate *startTimeDate = [dateFormatter dateFromString:startTime]; 


Я рекомендую использовать этот NSDateFormatter date formatting table. Это очень всесторонний и полезный.

+0

Единственный ответ, чтобы правильно определить проблемы и правильно обработать часовой пояс. – rmaddy

Смежные вопросы