当前位置: 首页 > 知识库问答 >
问题:

将ISO8601日期格式转换为本地时间(iOS)

安建木
2023-03-14

因此,有一个关于web应用程序的部分,用户可以向其中输入事件,web服务将这些事件以以下格式发送到移动应用程序:

"yyyy-MM-dd'T'HH:mm:ssZZZZZ"

我在尝试将字符串转换为日期时遇到了问题,这样我就可以从事件中获得时间(也可以在正确的时区中格式化),例如,这里有一个出现在“2015-03-20T20:00:00-07:00”上的字符串,当我拉动时,时间应该是太平洋时间1PM。但我得到的不是8PM就是3AM(这取决于我是否将UTC缩写添加到日期格式化程序中)。

这是我到目前为止所拥有的,我知道我在这里遗漏了一些东西&也许还有另一个需要使用的日期格式化程序,但到目前为止我还不知道我错在哪里。

NSString *datePattern = @"yyyy-MM-dd'T'HH:mm:ssZZZZZ";
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:datePattern];
NSString *sString = [valueDict valueForKey:@"start_date"];
NSDate *startDate = [dateFormatter dateFromString:sString];
NSDateFormatter *timeFormatter = [NSDateFormatter new];
[timeFormatter setDateFormat:@"hh:mm a"];
[timeFormatter setLocale:[NSLocale systemLocale]];
NSString *timeString = [timeFormatter stringFromDate:startDate];

共有1个答案

漆雕和昶
2023-03-14

2015-03-20T20:00:00-07:00是太平洋夏令时晚8点。

如果你代表的是1PM PDT,那就是

  • 2015-03-20T13:00:00-07:00

或以“祖鲁”表示(即GMT/UTC)

    null

使用web服务时,后者是ISO 8601日期的常见约定。然后,当您将其呈现给用户时,您将其呈现在他们的本地时区(使用NSDateFormatter及其默认的timezone设置)。

注意,当使用NSDateFormatter准备ISO 8601日期时,您将希望确保指定EN_US_POSIX区域设置,如技术问答QA1480所述。当为美国用户设计应用程序时,这并不重要,但如果用户在设备上不使用公历,这是最好的做法。

 类似资料:
  • 我想把这个2021年1月20日20:10:14转换成yyyy-MM-dd'T'HH:MM:ss格式。Android系统中的SSS'Z'。目前我正在使用函数,但当我转换为本地格式时,我没有得到原始时间

  • 问题内容: 从服务器上,我得到了这种格式的datetime变量:它是UTC时间。我想使用JavaScript将其转换为当前用户的浏览器时间。 如何使用JavaScript或jQuery完成此操作? 问题答案: 在将字符串转换为javascript中的日期之前,将’UTC’附加到字符串中:

  • 问题内容: 我从服务器获取UTC时区的字符串日期,我需要将其转换为本地时区。 我的密码: 此打印- utc:2015-04-01T11:42:00.269Z,日期:可选(2015-04-01 11:42:00 +0000) 如果我删除 它打印 utc:2015-04-01T11:42:00.269Z,日期:可选(2015-04-01 08:42:00 +0000) 我的当地时区是UTC +3,在第

  • 问题内容: 如何转换此 格式 ( ISO8601格式 ): 2014-03-13T09:05:50.240Z 为此( MySQL DATE格式 ): 2014-03-13 在PHP中? 问题答案: 尝试这个 完整的日期功能文档可以在这里找到:http : //php.net/manual/en/function.date.php PHP函数“ strtotime”不执行任何其他操作,然后将您的时间

  • 问题内容: 我从服务器获得的时间就像 。 我想将其转换为。 我还希望转换后的时间为24小时格式。任何人都可以解决这个问题。我想得到的输出就像 问题答案: 试试这个:

  • 我有以下字符串: 我尝试用以下代码将此字符串转换为: Java . time . format . datetimeparseexception:无法解析文本“18/07/2019 04:30:00”:无法从TemporalAccessor获取LocalDateTime 我错过了什么?