我想获得当前时间,但我收到了GMT。怎么了?

时间:2012-03-17 12:04:09

标签: ios nsdate nsdateformatter

我想获得当前时间,但我收到了GMT。我添加了语言环境,但它没有帮助我。我用的是iPod touch。有什么问题?

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    NSLocale *locale =[NSLocale currentLocale];
    [dateFormatter setLocale:locale];
    dateFormatter.dateFormat =@"yyyy-MM-dd HH:mm:ss ZZZ";
    NSDate *date = [dateFormatter dateFromString:[[NSDate date] description]];

更新:我使用NSDateFormatter因为我需要show

2012-03-17 12:20:33 

代替

2012-03-17 12:20:33 +0000

4 个答案:

答案 0 :(得分:4)

我找到了很好的解决方案。

NSCalendar * calendar = [NSCalendar currentCalendar];
NSDateComponents * components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSSecondCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit
                                            fromDate:[NSDate date]];
NSString * stringDate = [NSString stringWithFormat:@"%d-%d-%d %d:%d:%d", components.year, components.month, components.day, components.hour, components.minute, components.second];

另一种解决方案

NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSTimeZone *zone = [NSTimeZone localTimeZone];
[formatter setTimeZone:zone];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSLog(@"Date %@",[formatter stringFromDate:date]);

答案 1 :(得分:3)

嗯,你也可以

NSTimeZone* local = [NSTimeZone localTimeZone]; 
NSInteger secondsOffset = [localTimeZone secondsFromGMTForDate:[NSDate date]];

然后您可以将其添加到现有日期中。

答案 2 :(得分:1)

嗯,“ZZZ”是指定GMT的日期格式。见http://unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns

顺便说一句,不要将(NS)语言环境与(NS)时区混淆。他们不一样。语言环境定义样式,例如“01.02.2012”vs“02/01/2012”,时区定义...时区。

答案 3 :(得分:1)

奇怪的是,为什么你要在这里完成日期格式化? NSDate *date = [NSDate date];将为您提供当前时间的日期。