将具有1个时区的NSString日期转换为具有另一个时区的NSDate对象

时间:2011-05-01 16:43:36

标签: nsdate nsdateformatter

嘿大家,     我需要使用NSDateFormatter将以下格式转换为新格式。我很喜欢这个,但由于某种原因,我不记得这个foramt的正确格式信息:

'星期五,2011年3月25日10:16:00 -0700'。

我尝试使用这种格式:'aaa,dd bbb YYYY HH:MM:SS ZHHMM'但它不起作用,过去给我一个约会方式。

创建新日期时,我还需要将其转换为东部时区。它说“+0000”但是那个标准化为什么?

任何帮助表示赞赏, 谢谢, 〜Arash的

1 个答案:

答案 0 :(得分:1)

通常,当您获得这样的日期字符串时,您知道它们来自哪个区域设置,您将使用NSDateFormatter,使用setLocale:设置其区域设置,使用{{设置其日期和时间格式1}}和setDateStyle:,然后使用setTimeStyle:。如果由于您不知道语言环境而无法做到这一点,那么您可以use the UNIX functions

dateFromString:

接下来,您要将newDate“转换”为东部时间。我说“转换”是因为NSDates不包含任何关于时区的信息 - 它们只是表示自2001年1月1日以来的秒数 - 所以转换的想法毫无意义。当您打印出NSDate时,您可以使用UTC(+0000)获得它,但NSDate与该时区的关联性与其他任何时区无关。

您要做的是创建一个具有正确时区的dateFormatter并使用它来输出日期:

struct tm  sometime;
const char *formatString = "%a, %d %b %Y %T %z";
strptime_l("Fri, 25 Mar 2011 10:16:00 -0700", formatString, &sometime, NULL);
NSDate *newDate = [NSDate dateWithTimeIntervalSince1970: mktime(&sometime)];