将JSON日期(ticks)转换为NSDate

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

3

我猜测你的JSON值是自1970年以来的毫秒数,对吗?你可以使用NSDate的dateWithTimeIntervalSince1970:方法返回一个具有正确时间的NSDate对象。只需确保在将JSON毫秒数传递给NSDate之前将其转换为秒- Cocoa在大多数地方使用NSTimeInterval表示秒间隔。


谢谢Marc,那个对我有效。你知道如何将NSDate显示为客户端本地时区吗? - Zap
你知道怎么将NSDate转换为Date(ticks),以便准备发送到.NET Web服务的JSON对象吗? - Zap

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];

(from https://gist.github.com/726910)


这个解决方案很脆弱。它只适用于数字恰好有13位数(或者如果你去掉微秒,就是10位数)。它将无法处理2001年9月之前的所有日期。 - Martin R
马丁,你是正确的。我希望引用的gist链接能够为你提供更多的上下文。 - Ali

0

你需要检测客户端的语言环境才能够实现这个功能,除非你的客户知道如何做到这一点,否则可能没有太大意义。

使用NSDate的descriptionWithLocale:方法可以将其格式化为其他语言环境。而timeIntervalSince1970会返回自1970年以来的秒数,你可以将其乘以1000以获取毫秒并返回给客户端。所有这些都在NSDate文档中有详细说明。

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接