我在一个生产应用程序中有以下代码,它从用户输入的日期计算GMT日期:
NSDate *localDate = pickedDate;
NSTimeInterval timeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMT]; // You could also use the systemTimeZone method
NSTimeInterval gmtTimeInterval = [localDate timeIntervalSinceReferenceDate] - timeZoneOffset;
NSDate *gmtDate = [NSDate dateWithTimeIntervalSinceReferenceDate:gmtTimeInterval];在可怕的夏令时上周在英国生效之前,代码运行得很好。
如何在考虑夏令时的同时将日期转换为GMT?
发布于 2010-04-06 08:08:56
NSDate使用与绝对值的偏移量来表示时间间隔。基准是GMT,所有时间间隔都是GMT,这就是为什么你会看到区别。如果您想要日期的字符串表示形式(比如存储在数据库中或其他什么地方),可以使用NSDateFormatter在您需要的任何特定时区中创建它。
因此,这将始终为您提供GMT中日期的字符串表示(类似于存储在mysql中)(考虑了夏令时):
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; // e.g., set for mysql date strings
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSString* mysqlGMTString = [formatter stringFromDate:[NSDate date]];这将为您提供以GMT时间表示的正确日期字符串,而与本地时区无关。此外,请记住,您使用NSDate和时间间隔进行的所有相对测量都以GMT为基础。当您向用户显示日期格式化程序和日历对象时,或者如果您需要进行日历计算(例如,显示订阅明天到期的警告),请使用日期格式化程序和日历对象将它们转换为更有意义的内容。
编辑:我忘记添加时区了!如果没有它,格式化程序将使用系统时区。
https://stackoverflow.com/questions/2581669
复制相似问题