问题标签 [dateformatter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
321 浏览

ios - DateFormatter 返回时区的意外日期

我已经阅读了多篇关于此的帖子,其中大多数是由于未设置特定的时区而系统获取当前时区。我的情况略有不同,并给出了意想不到的结果,所以我将尝试详细解释。

我正在处理一个后端,该后端将日期拆分为日期和时间,并存储为整数值。例如,返回值可以是131006,它会转换为13:10:06。我知道这个后端总是返回UTC的日期。我将其转换为字符串,然后使用以下代码将字符串转换为日期:

为了做一些检查,我在这段代码中写了一些打印语句。这里最重要的是print(timeFormatter.timeZone.abbreviation()),它返回Optional("GMT")。这很好,正如预期的那样,因为 GMT == UTC。我还检查了 time 的值,它返回2000-01-01 13:10:06 +0000,这仍然是预期的结果。

现在转到代码,然后我将日期格式化为所需的字符串,并带有所需的时区:

在这段代码中,我还打印了TimeZone.current.abbreviation())返回的属性,这Optional("GMT+2")又是预期的结果。但是,当我们打印timeString变量的值时,输出是14:10,而不是预期的结果15:10

我使用 DateFormatter 的方式有什么问题?谢谢!

0 投票
0 回答
64 浏览

swift - Swift 日期格式化程序为某些日期字符串返回 null

我正在尝试使用日期格式化程序将“2018-03-22”字符串格式化为日期,但结果为空!对于此日期的上一个和下一个日期,格式化程序工作正常!这是我的代码片段:

0 投票
1 回答
1364 浏览

ios - 使用 JSONDecoder 解码古怪的日期格式

我在 JSON 返回中得到了我以前从未见过的日期格式。

"/Date(965620800000-0400)/"

(是Mon Aug 07 2000 00:00:00 GMT-0400

它是以毫秒为单位的日期值,带有 GMT 偏移量。我正在尝试使用 Swift 的原生JSONDecoder并设置dateDecodingStrategy.

最初,我尝试了这个:

正如我最初怀疑的那样,由于额外的非数字字符,它不起作用。这是我得到的最初错误:

debugDescription:“预期解码 Double,但找到了一个字符串/数据。”,基础错误:nil))无法读取数据,因为它的格式不正确。

我在Unicode.org 上搜索并找到了这个,它表示A毫秒,Z是 ISO8601 基本格式,带有小时、分钟和可选的秒字段。

考虑到这一点,我做了一个DateFormatter扩展:

在我的DataManager课堂上,我将其更改decoder.dateDecodingStrategy为我的自定义格式,如下所示:

对于每种不同的格式,我仍然会收到此错误:

debugDescription:“预期解码 Double,但找到了一个字符串/数据。”,基础错误:nil))无法读取数据,因为它的格式不正确。

我尝试从我的Codable结构中删除有问题的日期键,我得到了正确的回报,但不幸的是,我也需要日期。非常感谢我如何解码该字符串的任何建议。

0 投票
1 回答
1275 浏览

swift - CEST Time in Format HH:mm

I try to obtain the actual time of the CEST-Timezone in my Swift4-code in the following format

"HH:mm" // needed in CEST TimeZone (CEST = Central European Summer Time)

There are two strange behaviours I observe when trying to do so (see Code below...):

1.) when TimeZone-identifier is set to CEST --> then the received HH:mm is completely wrong (and is rather in the UTC than expected CEST timezone)

2.) when TimeZone-Identifier is set to "CET" (instead of CEST) --> then everything works ! (i.e. the received HH:mm time is the correct CEST-time (surprisingly - it is not in the expected CET-timezone but rather in the CEST-timezone)

The TimeZone I set my iPhone during the testing is set to PDT (= UTC-7)... But also other TimeZones do show the strange behaviour observed...

Here is my Code (see CEST vs. CET setting)

using the following extension on Date and String :

0 投票
1 回答
4515 浏览

ios - 您如何在 DateFormatters 的日期和时间设置中正确支持 iOS 12 小时/24 小时时间覆盖?

如果您的 iOS 设备设置为使用默认为 12 小时制的地区(例如美国),并且您的DateFormatter设置如下:

然后,如果在 iOS 设置中的日期和时间中打开“24 小时制”开关,它将以 24 小时格式输出时间。

如果您的自定义日期格式是“H:mm”,即 24 小时,并且您仍处于默认 12 小时区域,那么无论 24 小时开关的开/关状态如何,它都会输出 24 小时时间。

好的,很好,很简单,我将只使用“h:mm a”,然后用户将看到根据他们喜欢的格式显示的任何时间。但是,如果您将您的区域更改为默认使用 24 小时时间的区域,则行为会相反!如果您有“H:mm”并且 24 小时时间开关处于关闭状态,它将更改为 12 小时时间(“h:mm a”)。

是的,您通常可以通过使用时间样式(formatter.timeStyle = .short例如)而不是使用自定义日期格式来避免这种情况,但是如果您需要自定义日期格式并且想要尊重用户的设置,您应该怎么做?(例如,如果您需要在字符串中插入一些自定义字符,或者只是想让组件以非标准顺序排列)

我想在这里吃蛋糕和吃蛋糕的唯一方法是提前检查用户的偏好是什么(据我所知,你不能直接做到这一点)或者语言环境的默认设置是什么(我虽然看不到任何方法)然后相应地调整格式......</p>

我制作了这个 Xcode 项目是为了更清楚地演示这个问题(显然它必须在设备上运行,因为模拟器上没有 24 小时时间开关)。

我知道有各种解决方法,但我不明白如果您正在制作一个使用自定义日期/时间格式的 UI 并且拥有来自世界不同地区的用户的应用程序,Apple 希望您做什么?我错过了什么还是这是iOS中的一个缺陷?

注意:这个问题专门关于将日期转换为字符串以进行显示,所以我想尽可能尊重用户的语言环境和其他设置。我知道您可以将语言环境设置为 en_POSIX 等,但这并不能解决问题。我还希望尽可能无缝地实现这一点,并利用内置的任何功能,但这似乎不可能,除非您只针对具有相同默认 24 小时时间设置的区域中的用户......</p >

0 投票
3 回答
8888 浏览

ios - swift中的日期格式化程序

我想获得这种类型的甲酸盐-> 2018 年 4 月 20 日晚上 9:02:00 UTC+5:30 获取 Firestore 时间戳。我已经尝试过这段代码,但没有像上面那样得到正确的甲酸盐。

已经使用这个格式化程序 formatter.dateFormat = "MMMM d yyyy'T'hh:mm:ss a Z"

谢谢

0 投票
2 回答
511 浏览

swift - DataFormatter.date(from: " ") return wrong value (- 1 day) Swift

我有问题DateFormatter。我设置了当前时区formatter.timezone = Calendar.current.timezone,但是当我从当前日期转换时, Date()我得到了 - 1 天的值

我的代码

我知道这是不好的时区,但是如果将日期转换为字符串工作正常,如何设置我的时区以从字符串转换日期

0 投票
2 回答
5132 浏览

ios - Swift DateFormatter 返回错误的日期

在以下情况下,我无法获得正确的日期

我将“2018 年 5 月 2 日上午 8:31”作为日期,这是错误的

当相同的日期与不同的日期格式字符串一起使用时,我得到正确的日期

返回的日期是“2018 年 5 月 2 日上午 11:31”,这是正确的。

我想知道我在第一个代码块中做错了什么?或者这是日期格式化程序类中的错误?

0 投票
2 回答
132 浏览

ios - 标签的持续时间

我已经查看了此处与获取持续时间有关的所有代码。我需要做的只是花一点时间在标签中,格式为 hr:m:s,例如 20:23:04。我需要从 currentTime.StringValue 和 oldTime.StringValue 中获取时间,然后让它在 durationOfTime.StringValue 中显示小时的持续时间。

因此,例如说 currentTime = 11:00:04 和 oldTime = 9:00:04 然后我想要 durationOfTime = 2hr's。

现在就是这样,我有一个代码可以获取时间并将其存储在上面的格式中。但是,我在这里尝试不同的代码时遇到了各种问题,这些问题与时间长度有关。

0 投票
1 回答
589 浏览

json - 如何在没有时区的情况下解析 ISO8061 至今

我从服务器接收 JSON 格式的数据,其中一个字段date包含年、月和日:

"date": "2018-03-11",

我不需要确切的时间,只需要一天和一个月。我使用了带有语言环境的 DateFormatter,但我仍然收到来自 UTC 时区的日期。我住在 CET (+1)/ CEST (+2) 时区,所以我想知道解析这个日期的最佳方法是什么。当我"2018-03-11"从服务器收到时,我想得到:

日期格式化程序: