0

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

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

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

这可能吗?

4

2 回答 2

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. 对于固定格式的日期字符串,请始终使用en_US_POSIX语言环境
  3. 登录控制台时的 NSDate 始终显示为 GMT+00:00。NSDate 没有时区,只是在不同时区表示时有所不同。
  4. 通过将新时区设置为格式化程序,将形成的日期转换为任何时区。格式化程序永远不会更改它只是重新计算它将如何在这个新时区中表示的日期。
于 2013-05-28T11:29:13.353 回答
0

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

于 2013-05-28T11:29:23.817 回答