objective-c - dateFromComponents : 的意外结果

标签 objective-c io nsdate nsdatecomponents

下面的代码

NSCalendar *cal = [NSCalendar currentCalendar];
[cal setFirstWeekday:2];
[cal setMinimumDaysInFirstWeek:4];

NSDateComponents *comp = [[NSDateComponents alloc] init];
[comp setYear: 2012];
[comp setMonth:3];
[comp setDay: 12];
NSDate *date = [cal dateFromComponents:comp];
NSLog(@"date:%@",date);

日志:

date:2012-03-11 23:00:00 +0000

任何想法,为什么会发生这种情况以及如何避免 发送

最佳答案

我假设您在本地使用 CET 时区。这就是 [NSCalendar currentCalendar] 将用作时区的内容。

当您使用 NSLog 转储 NSDate 时,您将获得原始 UTC 格式的日期。要使用本地格式打印日期,请查看 NSDateFormatter 类,它有一个 timeZone 属性:

....
NSDate *date = [cal dateFromComponents:comp];
NSDateFormatter* fmt = [[NSDateFormatter alloc] init];
fmt.timeZone = [NSTimeZone defaultTimeZone]; // Probably not required
NSLog(@"date:%@", [fmt stringFromDate:date]);

关于objective-c - dateFromComponents : 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751249/

相关文章:

c++ - 为什么 cout 立即输出?

iphone - 如何将 1 分钟的时间间隔添加到 iPhone 中的 NSDate 对象

ios - 将完整日期转换为小时和分钟 - Swift

ios - 获取月 ios 中的最后一个星期二

ios - 如何以编程方式从 UIView 获取约束

iphone - Default.png 显示在模拟器中但不显示在真实设备 iphone 上?

java - FileReader 的优势与 FileInputStream 的优势

ios - 在输入另一个单元格后,如何在单元格中启用禁用的文本字段?

objective-c - iOS - 不断更新方法

file-io - Fortran 将文件读入数组 - 转置维度