Ayu*_*ary 3 time timezone cocoa-touch nsdate ios
我试图使用特定时区获取Unix时间戳(不一定与系统时区相同)
我试过这个:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSTimeZone *gmt = [NSTimeZone timeZoneWithName:@"Australia/Melbourne"];
[dateFormatter setTimeZone:gmt];
NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
NSDate *curdate = [dateFormatter dateFromString:timeStamp];
int unix_timestamp = [curdate timeIntervalSince1970];
Run Code Online (Sandbox Code Playgroud)
显然,这应该给出澳大利亚的Unix时间戳(最多几秒).然而,当我登录时curdate,它仍然是格林尼治标准时间的时间,timeStamp是澳大利亚/墨尔本的时间.
这可能是什么问题?
该方法timeIntervalSince1970返回自格林威治标准时间 1970年1月1日午夜起的秒数.
如果您想要自1970年1月1日墨尔本时间午夜以来的秒数,您只需要确定1970年1月1日GMT墨尔本的偏差.
为此,您可以使用NSTimeZone实例
NSDate* referenceDate = [NSDate dateWithTimeIntervalSince1970: 0];
NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Australia/Melbourne"];
int offset = [timeZone secondsFromGMTForDate: referenceDate];
int melbourneTimestamp = unix_timestamp - offset;
Run Code Online (Sandbox Code Playgroud)
或者,也许最后一行应该是加偏移量.只需测试代码并查看.我现在不在我的Mac上.
编辑:请参阅下面的Ayush评论.看起来偏移量是要添加的,而不是减去.
编辑#2:与海报聊天后,墨尔本时间 1970 年以来的时间戳可能实际上并不需要.在GMT之外的任何其他时区,大多数应用程序可能永远不需要跟踪这样的时间戳.在向用户显示时间时转换为时区.
| 归档时间: |
|
| 查看次数: |
4375 次 |
| 最近记录: |