gpt4 book ai didi

ios - NSDateComponents 返回意外结果

转载 作者:行者123 更新时间:2023-11-29 11:47:55 28 4
gpt4 key购买 nike

我有这段代码

NSDateComponents *comps = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:sender.date];
[comps setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSDate *converted = [[NSCalendar currentCalendar] dateFromComponents:comps];

Sender.date 可以输出到控制台

1963-02-23 12:00:00 am +0000

但是 UTC 的 comps.day 给了我 22。我希望它是 23,因为 UTC 中的发件人值显然包含等于 23 的日分量。

这与凌晨 12 点有什么关系吗?我在这里错过了什么?

谢谢!

最佳答案

这取决于您的意图。考虑:

NSString *string = @"1963-02-23 12:00:00 am +0000";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd hh:mm:ss a X";
NSDate *date = [formatter dateFromString:string];
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDateComponents *comps = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
NSLog(@"%@", comps);

这将报告:

<NSDateComponents: 0x610000140420>
Calendar Year: 1963
Month: 2
Leap month: no
Day: 23

然后我可以将其转换为我们本地时区的日期:

NSDate *converted = [[NSCalendar currentCalendar] dateFromComponents:comps];
NSLog(@"%@", converted);

这将显示为我本地时区 (GMT-8) 的午夜,也就是格林威治标准时间上午 8 点:

1963-02-23 08:00:00 +0000

但是,当我使用格式化程序向用户显示此内容时,它会在我的本地时区向我显示:

NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
outputFormatter.dateStyle = NSDateFormatterMediumStyle;
outputFormatter.timeStyle = NSDateFormatterMediumStyle;
NSLog(@"%@", [outputFormatter stringFromDate:converted]);

这将显示:

Feb 23, 1963, 12:00:00 AM

显然,如果您不想显示时间,请使用 NSDateFormatterNoStyletimeStyle,但我包含它只是为了向您展示真正发生的事情。

就个人而言,我发现以上所有内容都非常令人费解。我猜原始字符串试图反射(reflect)一个独立于任何特定时间和/或时区(例如生日、周年纪念日等)的日期,然后我认为如果省略时间和时区,一切都会容易得多来自原始字符串的信息,只捕获 yyyy-MM-dd 格式的日期并保留它。这样就简化了上面的大部分代码。

我可能会建议澄清您的实际意图,为什么您正在做您正在做的事情,我们也许能够提供更好的建议。

关于ios - NSDateComponents 返回意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42583609/

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