将JSON日期(刻度)转换为NSDate

时间:2009-08-12 13:28:43

标签: objective-c json date-conversion

有没有人知道如何在Objective-C中将JSON日期(ticks)转换为NSDate?有人可以发布一些代码吗?

4 个答案:

答案 0 :(得分:3)

我猜这里,但你的JSON值是自1970年以来的毫秒数,对吗?您可以使用NSDate的dateWithTimeIntervalSince1970:方法以正确的时间返回NSDate对象。只需确保将JSON毫秒数转换为秒,然后再将其传递给NSDate-- Cocoa在大多数地方使用NSTimeInterval,表示以秒为单位的间隔。

答案 1 :(得分: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];

(来自https://gist.github.com/726910

答案 2 :(得分:0)

您必须检测客户端的区域设置才能够做到这一点,除非您的客户知道如何做到这一点,否则可能没什么意义。

NSDate的descriptionWithLocale:将您为其他语言环境格式化的方式。而timeIntervalSince1970将回溯到1970年以来的(秒),你可以乘以1000来获得ms返回客户端。这些都在NSDate文档中。

http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html

答案 3 :(得分:0)

根据此页面:http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx刻度从0001年1月1日开始,因此dateWithTimeIntervalSince1970:不会自动设置为使用刻度线。您仍然可以使用此方法,但应根据差异进行调整。