iOS Swift:当字符串包含时区缩写时,如何将特定的日期字符串格式转换为日期对象?
Posted
技术标签:
【中文标题】iOS Swift:当字符串包含时区缩写时,如何将特定的日期字符串格式转换为日期对象?【英文标题】:iOS Swift: how to convert specific date string format to Date object, when string contains time zone abbreviation? 【发布时间】:2018-03-09 13:51:36 【问题描述】:我从服务器获取格式为“2018 年 3 月 8 日 16:00:00 PST”的日期字符串月份和日期之间有很多空格。
我的目的是基本上删除那些额外的空格。我的想法是——我会将字符串转换为 Date 对象,然后再转换回字符串。
如何使用 Date Formatter 将其转换为 Date 对象,同时考虑时区。
我担心这里的“PST”。在将日期转换为字符串时,我需要格式 - “2018 年 3 月 8 日 16:00:00 PST”,即 PST(或任何进入的时区)应在最终字符串中保持不变。
【问题讨论】:
Swift convert string to date的可能重复 【参考方案1】:extension String
func getDate(fromFormat format: String = "MMMM dd, yyyy HH:mm:ss zzz") -> Date?
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
return dateFormatter.date(from: self)
let myDateString = "March 08, 2018 16:00:00 PST"
myDateString.getDate()
您也可以使用其他时间格式调用。
【讨论】:
请将语言环境设置为 POSIX。任何解析都必须这样做。例如,March
取决于区域设置。 HH
可以被DateFormatter
覆盖为hh
,年份可以使用非公历解析,如果不这样做,PST
可以解释为Philippine Standard Time
。
@Sulthan,你能发帖回答吗?
嘿@Mansi,不设置时区或区域设置,它返回“2018 年 3 月 9 日 05:30:00 GMT+5:30”
@RashmiRanjanmallick 这可能是正确的。如果您的设备语言未设置为英语或您不使用公历(例如,如果您是中国人),则会出现问题。
@RashmiRanjanmallick 这是一个完全不同的问题。您需要将格式化程序设置为PST
时区并将给定的Date
格式化为String
。确保您了解Date
(一个时间点,没有时区)和相对于时区的日期字符串表示之间的区别。【参考方案2】:
试试这个
let isoDate = "March 08, 2018 16:00:00 PST"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMMM dd, yyyy HH:mm:ss z"
let date = dateFormatter.date(from: isoDate)!
【讨论】:
一方面,您必须将语言环境设置为 POSIX。如果您不这样做,解析将无法正常工作。另外,请在 Swift 中使用DateFormatter
,而不是NSDateFormatter
。 Z
也必须是小写的 z
。
哦,对不起,基本上我曾经在目标 C 中编码,所以得到了那个错误。我已经更新了答案谢谢【参考方案3】:
试试这个
class func stringToDate (dateString:String, dateFormat:String) -> Date?
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
let dateFromString = dateFormatter.date(from: dateString)
return dateFromString
【讨论】:
这与上面的答案相同。它如何处理“PST”部分? 检查一下,希望这有效 - How can I convert including timezone date in swift?以上是关于iOS Swift:当字符串包含时区缩写时,如何将特定的日期字符串格式转换为日期对象?的主要内容,如果未能解决你的问题,请参考以下文章