gpt4 book ai didi

ios - NSDate 在从字符串转换时返回不同的值 - 与 GMT 无关

转载 作者:行者123 更新时间:2023-11-28 19:08:46 35 4
gpt4 key购买 nike

我希望这与 GMT 无关,否则我会觉得自己很愚蠢。

2 个快速相关的问题。为什么这会转换为不同的日期?正在失去一天。我查看了其他答案中所述的时区,但它始终是 GMT 时区 0000,这正是我所期望的。我认为错误出在我的 setDateFormat 中,但我看不出如何修复它。

NSString *stringFromDate = self.dateLabel.currentTitle;
NSLog(@"StringFromDateWeight! %@", stringFromDate);

NSDateFormatter *df = [[NSDateFormatter alloc] init];
//Convert Back to NSDate
[df setDateFormat:@"ddMMyyyy"];

NSDate *inputedDate = [df dateFromString: stringFromDate];
NSLog(@"StringFromDateWeight2! %@", inputedDate);

NSLog(@"StringFromDateWeight!%@", stringFromDate);
17072013

NSLog(@"StringFromDateWeight2! %@", inputedDate); is  

2013-07-16 23:00:00 +0000

我还使用下面的代码来比较 2 个日期,我说的对吗,它会在几秒钟内返回?我如何将其更改为在几天内返回?

int intervall = (int) [theDate timeIntervalSinceDate: now];

最佳答案

如果您没有明确设置时区,NSDateFormatter 将使用您本地的时区。您没有设置一个,因此您的格式化程序将在您所在时区的“7 月 17 日午夜”创建一个 NSDate。 NSDate 的 description 方法将返回一个以 UTC 时区格式设置的日期。由于您得到“7 月 16 日 23:00:00”,我猜您的时区是 UTC+1。

您有两个选择。通过显式设置时区以 UTC 计算。

df.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

或者,通常更有用,不要看NSDate的description,使用[inputedDate descriptionWithLocale:[NSLocale currentLocale]]进行调试,会打印出为您的时区格式化的日期。
如果您想向用户显示日期,请使用另一个 NSDateFormatter(最好使用 dateStyle 和 timeStyle 而不是 dateFormat,因为 hardcoded dateFormats are evil)

只是显示方式不同,底层的NSDate对象还是一样的。


关于你的第二个问题:

在许多时区,每年有 2 天不是 24 小时,因此您无法使用从 timeIntervalSinceDate: 获得的秒数进行任何计算。

你必须使用 NSDateComponentsNSCalendar .幸运的是,已经有一种方法可以完全满足您的需求。 components:fromDate:toDate:options:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit fromDate:inputedDate toDate:[NSDate date] options:0];
NSLog(@"Date was %d days (and %d hours, %d minutes and %d seconds) ago", components.day, components.hour, components.minute, components.second);

如果只需要天数可以去掉除NSDayCalendarUnit以外的所有组件

关于ios - NSDate 在从字符串转换时返回不同的值 - 与 GMT 无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17709806/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com