Obj-C,格式化日期时出现问题,增加一天吗?
我在我的应用程序/功能中发现了一个错误。我传入一个日期的 NSString。 然后该函数使用 NSDateFotmatterShortStyle。
这是我在调试器中的函数的屏幕截图。
我希望最终的日期为 2011-04-18 也不知道为什么它添加了 1ppm,我需要它是 00:00:00
发生了什么以及如何发生我要解决这个问题吗?
我从这里使用 MidnightUTC 函数( 如何将当前日期(或任何日期)创建为不带小时、分钟和秒的 NSDate?)以消除小时。
I've discovered a bug in my app / function. I pass in a NSString of a date.
The function then uses the NSDateFotmatterShortStyle.
Heres a screen shot of my function in the debugger.
I'd like to end up with a date of 2011-04-18
Not sure why its added 1ppm either, I need it to be 00:00:00
Whats happening and how do I fix this ?
I use the MidnightUTC function from here ( How do I create the current date (or any date) as an NSDate without hours, minutes and seconds? ) to get rid of the hours.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
实际上,我认为午夜UTC 方法和您提供的代码之间没有任何联系。
无论如何,您给定示例的问题是,字符串
4/18/11
的解析将默认缺少诸如分钟等的值和您当前的时区,但该字符串将被假定为 GMT时间,因此这将导致您看到的偏移量。解决方案是为 NSDateFormatter 设置时区。看看这段代码,我一分钟前测试过它,以及控制台输出。 aaa 显示了奇怪的偏移量,bbb 看起来确实符合预期。
控制台输出
I actually see no connection between the midnightUTC method and your provided code.
Anyway, the problem with your given example is that, the parsing of the string
4/18/11
will default the missing values like minutes etc AND your current time zone, but the string will be assumed as GMT time so this will result in the offset you see.The solution is to set the time zone for the NSDateFormatter. Look at this code, I've tested it a minute ago, and the console output. aaa reveals the odd offset, bbb does look as expected.
Console output
您使用的午夜UTC函数通过将时区设置为GMT来创建日期,这与半年的UTC不同。 UTC 不会观察到任何夏季/夏令时变化,而 GMT 会观察到,因此 [NSTimeZone timeZoneForSecondsFromGMT:0] 将在大约半年的时间里比 UTC 晚一个小时。
the midnightUTC function you're using creates dates by setting the timeZone to GMT, which is different from UTC half the year. UTC doesn't observe any summer / daylight savings time changes, while GMT does, so [NSTimeZone timeZoneForSecondsFromGMT:0] will be an hour off UTC for roughly half the year.