有谁知道如何在 Objective-C 中将 JSON 日期(刻度)转换为 NSDate?有人可以发布一些代码吗?
Zap
问问题
9123 次
4 回答
3
我在这里猜测,但您的 JSON 值是自 1970 年以来的毫秒数,对吧?您可以使用 NSDate 的dateWithTimeIntervalSince1970:
方法返回具有正确时间的 NSDate 对象。只需确保将 JSON 毫秒数转换为秒,然后再将其传递给 NSDate——Cocoa 在大多数地方都使用 NSTimeInterval,它表示以秒为单位的间隔。
于 2009-08-12T13:40:29.817 回答
2
大致是这样的:
// Input string is something like: "/Date(1292851800000+0100)/" where
// 1292851800000 is milliseconds since 1970 and +0100 is the timezone
NSString *inputString = [item objectForKey:@"DateTimeSession"];
// This will tell number of seconds to add according to your default timezone
// Note: if you don't care about timezone changes, just delete/comment it out
NSInteger offset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
// A range of NSMakeRange(6, 10) will generate "1292851800" from "/Date(1292851800000+0100)/"
// as in example above. We crop additional three zeros, because "dateWithTimeIntervalSince1970:"
// wants seconds, not milliseconds; since 1 second is equal to 1000 milliseconds, this will work.
// Note: if you don't care about timezone changes, just chop out "dateByAddingTimeInterval:offset" part
NSDate *date = [[NSDate dateWithTimeIntervalSince1970:
[[inputString substringWithRange:NSMakeRange(6, 10)] intValue]]
dateByAddingTimeInterval:offset];
于 2010-12-03T19:21:57.383 回答
0
您必须检测客户的语言环境才能做到这一点,除非您的客户知道如何做到这一点,否则可能没有多大意义。
NSDate 的 descriptionWithLocale: 将是您将其格式化为其他语言环境的方式。并且 timeIntervalSince1970 将返回自 1970 年以来的(秒),您可以将其乘以 1000 以使 ms 返回到客户端。这一切都在 NSDate 文档中。
于 2009-08-12T19:13:45.027 回答
0
根据此页面: http: //msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx刻度从 0001 年 1 月 1 日开始,因此dateWithTimeIntervalSince1970:
不会自动设置为使用刻度。您仍然可以使用此方法,但应根据差异进行调整。
于 2012-09-26T01:48:03.847 回答