【问题标题】:NSDateFormatter incorrect date on simulator, correct date on deviceNSDateFormatter 模拟器上的日期不正确,设备上的日期正确
【发布时间】:2010-03-17 04:03:20
【问题描述】:

我正在建立一个日历并找出我做的一个月的第一天

[formatter setDateFormat:@"e"];
int startDay = [[formatter stringFromDate:newDate] intValue];

在设备上,这可以正常工作,并且每月 1 日的日期正确。但在模拟器上是后天。尽管模拟器并不太重要,但它有点让我发疯,以为我做错了什么。我试图设置格式化程序的语言环境,但没有区别,我也不认为应该这样做。任何人都可以对此有所了解吗?

顺便说一句,还有比这更好的方法来构建日历吗?

更新:似乎如果我不设置语言环境,它在设备上可以正常工作,但在模拟器上却不行。如果我将语言环境设置为 en_US,它们都不起作用。如果这有任何改变,我在澳大利亚,但我很确定美国和澳大利亚都有相同的日历:/

【问题讨论】:

  • 不,这是一个格式问题,我的问题是我认为与模拟器相比设备上的时区差异,即使我只是通过一个日期没有时间。

标签: iphone objective-c ios-simulator nsdateformatter


【解决方案1】:

这听起来像是正确的行为,具体取决于您传入的日期。NSDate 对应于世界时的精确点。届时,在一个时区可能是星期一,而在另一个时区可能是星期二。

你可能想要[[NSCalendar currentCalendar] firstWeekDay]

【讨论】:

  • 嗯,我以为我读到 NSCalendar 在 iPhone 上不可用,但现在我调查了一下。我去看看
  • [[NSCalendar currentCalendar] firstWeekDay] 返回一周的第一天,即星期一。您也可以将其设置为星期天。无论哪种方式,它每个月只返回 1。仍在调查正在通过的 NSDate。我没有设置时间或时区,只是一个日期,所以不确定到底发生了什么。
【解决方案2】:

似乎没有解决方案。更改设备上的时区不会导致问题,并且所有日志输出都会报告正确的时区,但 NSDate 似乎从模拟器上的两个不同位置提取时区,可能一个用于 Cupertino,一个用于本地。

查看其他人获得当月第一天的解决方案,它与我的代码相同(奇怪,因为我没有复制)并且没有人报告问题,也许这些用户在美国,所以问题没有浮出水面。更改计算机上的时区也无济于事。

【讨论】:

    【解决方案3】:

    如果您在模拟器和设备上有不同的日历怎么办?一个有星期一作为第一个工作日,另一个有星期日。可能这可能是问题的原因......

    【讨论】:

    • 手机从电脑同步它的日期,我在日历中的其他部分从来没有遇到过问题。
    猜你喜欢
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多