Ноль NSDate при попытке получить дату от UTC представляет в виде строки во всемирное время

Regex использует символ обратной косой черты '\' для выхода из литерала. Учитывая, что Java также использует символ обратной косой черты, необходимо было бы использовать двойной bashslash как:

   String S = "\\[hi"

, Который станет Строкой:

  \[hi

, который будет передан regex.

Или если Вы только заботитесь о литеральной строке и не нуждаетесь в regex, Вы могли бы сделать следующее:

if (T.indexOf("[hi") != -1)  {
22
задан Eric Freese 12 August 2009 в 18:58
поделиться

4 ответа

У меня тоже была эта проблема, я не уверен, ошибка ли это в API в коде Apple или мое непонимание, но я работал над этим, используя часовые смещения в мои строки даты.

Если вы измените код в своем примере на:

NSDateFormatter* df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
NSString* str = @"2009-08-11T06:00:00.000-0700";   // NOTE -0700 is the only change
NSDate* date = [df dateFromString:str];

Теперь он проанализирует строку даты. Конечно, -0700 часов - это мое смещение, вам придется изменить его на свое. Надеюсь, это поможет.

28
ответ дан 29 November 2019 в 04:23
поделиться

Я думаю, вам нужно заключить Z в одинарные кавычки в строке формата, потому что Z на самом деле что-то значит для форматировщика, и вы хотите, чтобы вместо этого он представлял буквальный символ.

    [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
4
ответ дан 29 November 2019 в 04:23
поделиться

это может вам помочь .. "Z" является буквальным обозначением кода часового пояса. попробуйте использовать «о» (буква, а не ноль). Буквальное «о» означает смещение по Гринвичу. Я столкнулся с этим некоторое время назад, надеюсь, это вам помогло.

0
ответ дан 29 November 2019 в 04:23
поделиться
-(NSDate*)dateFromZulu:(NSString*)str {
    if (str == nil) {
        NSLog(@"Error getting date");
        return [NSDate date];
    }

    NSDateFormatter *f = [[NSDateFormatter alloc] init];
    [f setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss Z"];
    NSDate *ret = [f dateFromString:[str stringByReplacingOccurrencesOfString:@"Z" withString:@" +0000"]];
    [f release];

    if (ret == nil) {
        ret = [NSDate date];
        NSLog(@"Error formatting date (%@)",str);       
    }   
    return ret;     
}
-1
ответ дан 29 November 2019 в 04:23
поделиться