我从服务器获取数据,部分数据是时间。时间以UTC格式存储在我的数据库中,因此我返回的内容也是UTC。例如:2014-05-22 05:12:40
此外,我使用DateTools来显示设备上的时差,如X hours ago
或X minutes ago
等....
问题在于,当来自服务器的UTC时间与当地时间进行比较时,存在巨大差异。由于时差,我应该说X seconds ago
说X hours ago
。
问题
如何将服务器的日期转换为设备上设置的本地时区?
这就是我现在正在做的事情:
@date_formatter = NSDateFormatter.alloc.init
@date_formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
@date_from_server = "2014-05-22 05:12:40"
@date = @date_formatter.dateFromString(@date_from_server)
@time.text = @date.shortTimeAgoSinceNow
答案 0 :(得分:1)
我不知道它是如何在ruby运动中完成的,但是在Objective-C中,它完成如下:
1。)创建NSDateFormatter
类
2。)设置它的特定日期格式字符串,并设置它的特定时区
3。)通过dateformatter实例
从传入字符串中获取日期4.。)将日期格式化程序实例的时区更改为本地时区
5.)将先前获得的日期转换为新时区。
在Objective-C
中NSDateFormatter* df = [[NSDateFormatter alloc] init];
[df setDateFormat:incomingDateFormat];
[df setTimeZone:incomingTimeZone]; // Can be set to @"UTC"
NSDate *date = [df dateFromString:incomingDateString];
[df setDateFormat:newDateFormat];
[df setTimeZone:newTimeZone]; //// Can be set to [NSTimeZone localTimeZone]
NSString *newDateStr = [df stringFromDate:date];
我相信在Rubymotion中也可以这样做。
答案 1 :(得分:1)
NSDateFormatter *formater = [[NSDateFormatter alloc] init];
formater.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *datestr = @"2014-05-22 05:12:40";
formater.timeZone = [NSTimeZone localTimeZone];
NSDate *date = [[formater dateFromString:datestr] dateByAddingTimeInterval:formater.timeZone.secondsFromGMT];
答案 2 :(得分:0)
NSDateFormatter *df=[[[NSDateFormatter alloc] init] autorelease];
// Set the date format according to your needs
[df setTimeZone:[NSTimeZone timeZoneWithName:@"America/Toronto"]];
//[df setDateFormat:@"MM/dd/YYYY HH:mm "] // for 24 hour format
[df setDateFormat:@"YYYY-MM-dd HH:mm:ss"];// for 12 hour format
试试这个