【问题标题】:How to get local time with NSDateFormatter (parsing from ICS file)如何使用 NSDateFormatter 获取本地时间(从 ICS 文件解析)
【发布时间】:2013-10-03 05:32:20
【问题描述】:

我正在尝试从 NSDate 获取本地时间,它只输出 +0000 时区。我正在解析 ICS 文件中的信息,然后使用 NSDateFormatter 将字符串(看起来像 20131001T114445Z)转换为日期,但由于某种原因,我无法将其更改为用户的本地时间。

这里是相关代码 -

+(ISParseICS*) icsParser
{
    if( !fetcher ) {
        fetcher = [ISParseICS new];
        fetcher.dateFormatter = [[NSDateFormatter alloc] init];
        [fetcher.dateFormatter setDateFormat:@"yyyyMMdd HHmmss"];

        NSLog(@"Created new singleton fetcher");
    }
    return fetcher;
}

下面的代码在 -(NSMutableArray *)fetchPassesSync

// Extract date/time
        NSString *unformattedEndDateTimeString;
        NSDate *endDate;
        eventScanner = [NSScanner scannerWithString:event];
        [eventScanner scanUpToString:@"DTEND:" intoString:nil];
        [eventScanner scanUpToString:@"\n" intoString:&unformattedEndDateTimeString];

        unformattedEndDateTimeString = [unformattedEndDateTimeString stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"DTEND:"] withString:@""];
        NSLog(@"This is unformattedEndDateTimeString: %@", unformattedEndDateTimeString);
        endDate = [self dateFromString:unformattedEndDateTimeString];
        NSLog(@"End date - %@", endDate);

...最后一段:

-(NSDate *)dateFromString:(NSString *)dateString {

    dateString = [dateString stringByReplacingOccurrencesOfString:@"T" withString:@" "];
    dateString = [dateString stringByReplacingOccurrencesOfString:@"Z" withString:@""];
    NSDate *date = [self.dateFormatter dateFromString:dateString];


//    NSLog(@"The output date: %@", date);


    return date;
}

我对编程很陌生,我希望我正确地提出了这个问题。提前致谢。

编辑:我从所有这些代码中得到的是它采用字符串“20131001T114445Z”并输出如下“2013-10-01 11:44:45 +0000”

【问题讨论】:

  • 尝试像这样使用 [fetcher.dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  • z 不是指“祖鲁时间”(即 GMT + 0000)吗?
  • @Shan 是的,谢谢,我明白了。谢谢!
  • @trojanfoe 是的,z 表示 zulu/+0000 - 我终于弄明白了。谢谢!
  • @user2829186 欢迎 :)

标签: ios objective-c nsdate nsdateformatter


【解决方案1】:

试试这个:-

 NSString *dateStr = @"20131001T114445Z";

    // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
    [dateFormat setDateFormat:@"yyyyMMdd'T'hhmmss'Z'"];
    NSDate *date = [dateFormat dateFromString:dateStr];

    // Convert date object to desired output format
    [dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss Z"];
    dateStr = [dateFormat stringFromDate:date];
    NSLog(@"%@",dateStr);
    [dateFormat release];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多