【问题标题】:Formatting a DateTime object from .NET into a NSDate for objective-c将 .NET 中的 DateTime 对象格式化为 Objective-c 的 NSDate
【发布时间】:2011-08-14 04:19:36
【问题描述】:

我正在使用一个将 .NET DateTime 对象返回到我的 iOS 应用程序的 API。我对发生的事情有点困惑,DateTime 在离开 API 时看起来很好,但是当它进入时,它会通过 JSON 并以如下所示的字符串形式进入:

/Date(1303884000000-0600)/

WTF 是这样的,我怎样才能把它变成一个 NSDate 对象??

谢谢!

【问题讨论】:

    标签: objective-c datetime date format nsdate


    【解决方案1】:

    来自Parsing JSON dates on IPhone我发现以下功能很完美:

        - (NSDate*) getDateFromJSON:(NSString *)dateString
    {
    // Expect date in this format "/Date(1268123281843)/"
    int startPos = [dateString rangeOfString:@"("].location+1;
    int endPos = [dateString rangeOfString:@")"].location;
    NSRange range = NSMakeRange(startPos,endPos-startPos);
    unsigned long long milliseconds = [[dateString substringWithRange:range] longLongValue];
    NSLog(@"%llu",milliseconds);
    NSTimeInterval interval = milliseconds/1000;
    return [NSDate dateWithTimeIntervalSince1970:interval];
    }
    

    【讨论】:

    • 请注意,这不处理时区偏移量。
    【解决方案2】:

    【讨论】:

    • 这应该是问题的答案
    【解决方案3】:

    从 UTC 时间 1970 年 1 月 1 日开始,您所得到的基本上是毫秒,其中 -0600 是时区偏移量。看看这篇博文http://weblogs.asp.net/bleroy/archive/2008/01/18/dates-and-json.aspx

    您可能必须编写一个自定义的 NSDateFormatter 来处理该格式的日期,或者您可以将其格式化为 .NET(更简单),以 JSON 格式输出字符串,然后使用标准的 NSDateFormatter。

    【讨论】:

    • 我无法弄清楚为什么字符串末尾有 3 个额外的零。使用带有“1303884000000”的unix时间转换器我得到了错误的日期。如果我去掉 3 个零并使用“1303884000”进行转换,我会得到正确的日期。那些额外的零是(或来自)什么??
    • 哦,我猜这是自 1970 年以来的毫秒数,而不是几秒。因此,要将其解析为 NSDate,我必须去掉所有字符,然后比较自 1970 年以来的时间??
    • 你可以这样做。然后,您可以在必要时添加/减去小时以调整时区。就像我之前说的,您可能希望在 .NET 端进行更多格式化,因为这样可能更容易:)
    • 啊问题解决了,一个函数解析! stackoverflow.com/questions/1757303/…
    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多