【问题标题】:Objective C - how to get current time in ISO 8601 format?Objective C - 如何以 ISO 8601 格式获取当前时间?
【发布时间】:2011-12-30 23:44:04
【问题描述】:

如何获取 ISO 8601 格式的当前时间?它应该类似于 2011-11-16T22:06Z

【问题讨论】:

  • 你不能使用一个简单的 NSDateFormatter 调用——“yyyy-MM-dd'T'HH:mmZ”之类的吗? (不要忘记设置区域设置以避免上午/下午混乱。)
  • @Daniel R Hicks 我就是这么做的,而且成功了!您想将其转换为答案以便我接受吗?

标签: objective-c date


【解决方案1】:

为此使用一个简单的 NSDateFormatter 调用 -- "yyyy-MM-dd'T'HH:mmZ" 或类似的。 (不要忘记设置区域设置以避免上午/下午混乱。)

【讨论】:

  • 我认为应该是yyyy-MM-dd'T'HH:mm'Z'
  • 在我的情况下,如果日期是 2013-11-29T12:42+06.00,则 yyyy-MM-dd'T'HH:mm'Z' 不适用于 ISO 8601。 yyyy'-'MM'-'dd'T'HH':'mmZ 工作正常
  • @user1264176 - 我从未见过像这样带有点的时区。对于带有冒号的时区,您使用 ZZZZZ。因为没有冒号 Z 可以正常工作。
  • 我的意思是我必须删除包裹 Z 的 '(撇号)。
  • 是的,对不起,时区实际上是带有冒号的。我打错了。
【解决方案2】:

纯 C 解决方案,仅使用标准 C 功能:

#include <stdio.h>
#include <time.h>
int main(void) {
    time_t now = time(NULL);
    struct tm *now_tm = gmtime(&now);
    char iso_8601[] = "YYYY-MM-DDTHH:MMZ"; 
    /* init just to get the right length */

    strftime(iso_8601, sizeof iso_8601, "%FT%RZ", now_tm);
    puts(iso_8601);
    return 0;
}

【讨论】:

    【解决方案3】:

    我通过looking at this potentially duplicate question 找到了您的答案,其中一个答案说使用名为 Peter Hosey 的 ISO8601DateFormatter 的开源解决方案。

    你可以download from here。奖励,它仅在几天前(2011 年 11 月 5 日)更新。

    而且,要获取当前日期和时间......你会这样做:

    ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
    NSString *dateString = [formatter stringFromDate:[NSDate date]];
    [formatter release];
    formatter = nil;
    

    【讨论】:

    • 我正在寻找一个不使用任何库的简单解决方案。
    • 这是正确的答案,单个文件不是库!它也是一段非常棒的代码......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 2010-11-11
    • 2011-04-24
    相关资源
    最近更新 更多