首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >处理日光时差

处理日光时差
EN

Stack Overflow用户
提问于 2013-10-29 05:23:45
回答 3查看 129关注 0票数 0

根据我们的应用程序规范,我们需要安排电话会议,而我的日程安排一直面临着日照时差的问题。

情况是这样的:今年11月3日,当我计划在11月4日下午5点打电话时,我们的日照时间发生了变化,那时我正在转换成格林尼治标准时间,并发送到服务器。如果我把格林尼治时间改为11月4日下午4点,而不是下午5点,尽管它只是正确的,但是根据用户的角度,他安排在下午5点而不是下午4点,那么该如何处理这个问题呢?

我要转换成GMT就像..。

代码语言:javascript
代码运行次数:0
运行
复制
- (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;
}

编辑:

我就是这样把格林尼治时间转移到当地的..。

代码语言:javascript
代码运行次数:0
运行
复制
  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];

任何帮助都是非常感谢的。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-04 07:02:25

有问题了,

问题是GMT转换,因为我确实考虑了当前的时间差到格林尼治标准时间,而不是在转换日期的时差。

我就是这么修好的..。

代码语言:javascript
代码运行次数:0
运行
复制
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDateComponents *date_comp = [cal components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:localDate];
票数 0
EN

Stack Overflow用户

发布于 2013-10-29 05:42:35

一次又一次和…::不能将日期转换为时区。您可以将日期表示转换为时区。这不会改变日期。不要试图比约会更棘手。

Unexpected value from NSDate

如果您有一个本地格式的日期表示(即我们),只需使用本地日期格式化程序从它构建一个日期。然后将此日期发送到$anywhere。

在返回的过程中,阅读这个日期(不是它的一个表示),并使用本地格式化程序构建一个本地表示。

绝不将日期的任何本地表示发送到任何地方。GMT是一种本地代表。(G代表什么?)

票数 1
EN

Stack Overflow用户

发布于 2013-10-29 05:43:58

NSDate是绝对时间,而不是基于时区。所以这基本上就像在格林尼治标准时间上描述的那样存储时间。

所以你只需要得到一个时区是格林尼治标准时间的日历,然后得到组件。

代码语言:javascript
代码运行次数:0
运行
复制
 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
 [calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

 NSDateComponents *date_comp = [calendar components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:gmtDate];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19650290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档