【问题标题】:iOS 12 stringFromDate method returns incorrect valueiOS 12 stringFromDate 方法返回不正确的值
【发布时间】:2019-03-27 02:40:35
【问题描述】:

在 iOS 12 中,我注意到 [NSDateFormatter stringFromDate] 方法在模拟器 iPad 上返回的值不正确,但在物理 iPad 上返回正确的值。

示例代码:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"c"];

NSDate *currentDate = [NSDate date];
// Returns correct value on both physical and simulator iPads (eg. Fri Oct 19 15:39:53 2018)

NSString *currentDateAsString = [dateFormat stringFromDate:currentDate];
// Physical iPad: 5 (correct)
// Simulator iPad: 6 (incorrect)

两台 iPad 具有相同的日期/时间设置(例如,相同的时区)。这个错误的原因是什么?

【问题讨论】:

  • 用不正确的值更新了原始问题
  • 嗯,"c" 显示的格式取决于机器认为一周的第一天是什么。这可能因机器而异。您还说它们具有相同的设置,但我们没有理由相信。它们可能有许多不同的微妙方式。 "c" 格式是一种非常生硬的工具;尝试一种包含更多信息的格式。
  • 基本上我需要将星期几作为数字,"c" 似乎符合该要求。这个问题在之前的 iOS 升级中没有出现,但是现在从 iOS 11 到 12 出现了。
  • 我不否认这一点!我建议您通过尝试一些信息更丰富的格式进一步探索,看看这里发生了什么。

标签: ios date nsdate nsdateformatter ios12


【解决方案1】:

在您的真实 iPad 和模拟器 iPad 上检查 the first weekday 以查看它们是否匹配:

NSCalendar.current.firstWeekday

并将该值纳入您从日期格式化程序获取的工作日的计算中。

iOS 上一周的第一天取决于区域设置。仔细检查您的真实 iPad 和模拟器 iPad 上的设置 -> 常规 -> 语言和区域 -> 区域中的设置。此外,可能值得在 Mac 上的系统偏好设置 -> 语言和地区 -> 一周的第一天查看一周的第一天。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多