iPhone设置和GMT偏移的日期时间格式

时间:2013-05-28 11:23:23

标签: ios iphone objective-c nsdateformatter datetime-format

我有日期时间格式的字符串,例如:2013-05-28 10:56:31

如何将此字符串格式化为iPhone默认格式? (在iPhone设置中)

如何设置GMT中的日期时间加上时移偏移(也在iphone中设置)。例如GMT + 1

这可能吗?

2 个答案:

答案 0 :(得分:6)

您可以使用NSDateFormatter来实现此目的。

NSString *dateString = @"2013-05-28 10:56:31";

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

//Special Locale for fixed dateStrings
NSLocale *locale = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"];
[formatter setLocale:locale];

//Assuming the dateString is in GMT+00:00
//formatter by default would be set to local timezone 
NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
[formatter setTimeZone:timeZone];

[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate *date =[formatter dateFromString:dateString];

//After forming the date set local time zone to formatter    
NSTimeZone *localTimeZone = [NSTimeZone localTimeZone];
[formatter setTimeZone:localTimeZone];

NSString *newTimeZoneDateString = [formatter stringFromDate:date];
NSLog(@"%@",newTimeZoneDateString);

使用dateFormatter的几点建议。

  1. 如果字符串不包含任何有关时区的信息,并且它与设备中的时区不同,则始终将时区设置为dateFormatter。
  2. 对于固定格式,dateStrings始终使用en_US_POSIX区域设置
  3. 登录控制台时的NSDate始终以GMT + 00:00显示。 NSDate没有时区,只是在不同时区表示时有所不同。
  4. 通过将新时区设置为格式化程序,将形成的日期转换为任何时区。 Formatter永远不会更改日期,只会重新计算它在新时区中的表示方式。

答案 1 :(得分:0)

请参阅有关NSDateFormatter的文档,特别是dateFromString,其中返回“使用接收方当前设置解释的字符串的日期表示。”