8

我从 API 请求中以 s 的形式返回了start_times一些end_times内容。NSDecimalNumber

我已经成功地将这些NSDecimalNumbers 转换为NSDates,但是代码没有考虑时区。

我需要它使用设备上默认的时区。

4

3 回答 3

31

这应该可以满足您当前语言环境的需要

double unixTimeStamp =1304245000;
NSTimeInterval _interval=unixTimeStamp;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];
NSDateFormatter *formatter= [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateFormat:@"dd.MM.yyyy"];
NSString *dateString = [formatter stringFromDate:date];
于 2012-06-06T21:15:21.777 回答
9

Unix 时间没有时区。它在 UTC 中定义为自 1970 年 1 月 1 日午夜以来的秒数。

您应该使用正确的时区获取 NSDates

[NSDate dateWithTimeIntervalSince1970:myEpochTimestamp];
于 2012-06-06T21:15:45.677 回答
7

试试这样的..

NSDate* sourceDate = ... // your NSDate

NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease];
于 2012-06-06T21:16:35.323 回答