有人知道如何在Objective-C中将JSON日期(ticks)转换为NSDate吗?有人可以发布一些代码吗?
我猜测你的JSON值是自1970年以来的毫秒数,对吗?你可以使用NSDate的dateWithTimeIntervalSince1970:
方法返回一个具有正确时间的NSDate对象。只需确保在将JSON毫秒数传递给NSDate之前将其转换为秒- Cocoa在大多数地方使用NSTimeInterval表示秒间隔。
以下是大致过程:
// 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];
你需要检测客户端的语言环境才能够实现这个功能,除非你的客户知道如何做到这一点,否则可能没有太大意义。
使用NSDate的descriptionWithLocale:方法可以将其格式化为其他语言环境。而timeIntervalSince1970会返回自1970年以来的秒数,你可以将其乘以1000以获取毫秒并返回给客户端。所有这些都在NSDate文档中有详细说明。
dateWithTimeIntervalSince1970:
并没有自动设置为与ticks兼容。你仍然可以使用这个方法,但需要调整差异。