NSDate 到 NSString 问题

NSDate to NSString issue

我有一个关于 NSDate 的小问题。 我需要一个带有其他地方 "today date" 的 NSDate 对象(例如 Australia/Brisbane,而我在意大利)。

我现在做的是将timeZone定义为:

NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"Australia/Brisbane"];

创建一个 NSDateFormatter:

NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeZone:timeZone];

获取一个NSString:

NSString *todayNSString = [dateFormatter stringFromDate:[NSDate date]];

问题是当我尝试将 NSString 重新转换为 NSDate 时。

假设我的本地(意大利)date/time 是 2015-03-25 13:52:00 CET。

在这种情况下,todayNSString = "Mar 25, 2015, 10:52 PM" (in Australia/Brisbane)

如果我将 todayNSString 转换回 NSDate 对象:

todayNSDate = [dateFormatter dateFromString:todayNSString];

我得到: todayNSDate = 2015-03-25 13:52:00 CET(即意大利时间)

虽然我期望:

todayNSDate = 2015-03-25 22:52:00

最后一行代码有什么问题还是我的预期不正确?

谢谢, 科拉多

再见科拉多, 不,没有错,只是你对 NSDate 的想法。

考虑 NSDate 始终 伦敦的日期(天+小时)。

只是当您尝试以字符串形式打印出来时,它在另一个 time/hour 中是 "translated/converted"。

因此,当您将字符串(澳大利亚格式)转换回 NSDate 时,您会得到正确的伦敦时间(因为 dateFormatter 知道您传递的字符串是澳大利亚格式)。

然后当你制作一个 NSLog 时,你会得到伦敦时间,

NSLog(@"todayNSDate: %@", todayNSDate);

意味着你得到的是伦敦时间,而在澳大利亚是 "Mar 25, 2015, 10:52 PM"

是否以不同的方式打印它取决于您,再次使用不同的 NSDateFormatter...

如果您尝试此代码:

NSDate* now = [NSDate date];
LOG(@"1:::NOW::: %@", now); // input date: 1:::NOW::: 2015-03-25 13:51:36 +0000 (LONDON TIME

NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"Australia/Brisbane"];

NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeZone:timeZone];
NSString *todayNSString = [dateFormatter stringFromDate:now];
LOG(@"2:::todayNSString::: %@", todayNSString); // output STRING: 2:::todayNSString::: 25/mar/2015 23:58 (Australian NSSTring)

NSDate* todayNSDate = [dateFormatter dateFromString:todayNSString];
LOG(@"3:::NOW::: %@", todayNSDate); // output date: 3:::NOW::: 2015-03-25 13:51:00 +0000 (LONDON TIME)

你可以看到打印的第一个日期等于重新转换的日期(但是秒数,因为你使用了 dateFormatter setTimeStyle:NSDateFormatterShortStyle)