【问题标题】:Converting String to Date assigns wrong values将字符串转换为日期会分配错误的值
【发布时间】:2018-02-28 13:58:43
【问题描述】:

我正在尝试从字符串构造日期。日期采用 .islamic 日历。我正在使用以下代码

let StringValue = "1439/01/02"
//constructing the Hijri Date
let HijriFormatter = DateFormatter ()
HijriFormatter.calendar = Calendar(identifier: .islamic)
HijriFormatter.dateFormat="yyyy/MM/dd"
HijriFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00")
let hijriDate =  HijriFormatter.date(from: StringValue)
print (hijriDate!)

输出应该类似于字符串。但是,由于某种原因,我得到以下输出:

2017-09-22 00:00:00 +0000

知道代码为什么会这样

【问题讨论】:

  • 您打印Date - 这是一个绝对时间点,并且始终使用 UTC 打印。 stackoverflow.com/questions/39937019/… 的可能重复项
  • 马丁是对的。当您执行以下操作时,您可以验证格式化程序是否设置正确:HijriFormatter.string(from: hijriDate!) 这将为您提供一个类似于原始字符串的字符串(因为它与传递的格式匹配)。

标签: swift string date


【解决方案1】:

您可以使用日历从回历日期获取日期组件:

    let calenadr = Calendar(identifier: .islamicUmmAlQura)
    let unitFlags: Set<Calendar.Component> = [.day, .month, .year]
    let comps = calenadr.dateComponents(unitFlags, from: hijriDate!)
    print(comps.day , comps.month, comps.year)

【讨论】:

    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多