【发布时间】:2013-11-08 03:21:27
【问题描述】:
根据我们的应用程序规范,我们需要安排电话会议,而我在安排时遇到了日光时差的问题。
情况就是这样:美国夏令时在今年 11 月 3 日发生变化,当时我安排了一个电话,例如:11 月 4 日下午 5 点,那时我正在转换为 GMT 并发送到服务器。如果我将格林威治标准时间转换为 11 月 4 日下午 4 点,而不是下午 5 点。尽管它只是正确的,但是从用户的角度来看,他安排在下午 5 点而不是下午 4 点,那么如何处理这种情况。
我正在转换成格林威治标准时间...
- (NSDateComponents*) convert_to_gmt_time : (NSDate*) date
{
NSDate *localDate = date;
NSTimeInterval timeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
NSTimeInterval gmtTimeInterval = [localDate timeIntervalSinceReferenceDate] - timeZoneOffset;
NSDate *gmtDate = [NSDate dateWithTimeIntervalSinceReferenceDate:gmtTimeInterval];
NSDateComponents *date_comp = [[NSCalendar currentCalendar] components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:gmtDate];
return date_comp;
}
编辑:
这就是我将 GMT 时间转换为本地时间的方式...
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd, yyyy"];
NSDate *strt_date_loc = [gregorian dateFromComponents:start_date]; // start_date i'm filling after received from server as GMT.
// Get date string.
NSString *strt_date = [dateFormatter stringFromDate: strt_date_loc];
非常感谢任何帮助。谢谢。
【问题讨论】:
-
服务器应接受并以 UTC 格式保存日期。当您的应用从服务器获取日期(UTC 格式)时,您可以将其转换为您的本地时区。
-
这里最可能的情况是您输入的日期不正确。请提供用于生成该代码的代码。 :)
-
@StevenFisher 请检查编辑。
-
strt_date_loc是convert_to_gmt_time的参数吗? -
@StevenFisher 不,它已经从 gmt 转换为本地,strt_date_local 我曾经使用格式化程序来形成字符串,在 11 月 3 日之前它给出了正确的值,但是在它创建字符串之后不到 1 小时应该是。
标签: ios objective-c nsdate dst nsdatecomponents