gpt4 book ai didi

swift - NSDate to string 显示比应有的多 1 小时

转载 作者:可可西里 更新时间:2023-11-01 01:37:37 25 4
gpt4 key购买 nike

所以我正在制作一个小应用程序。我能够从两个 UiDatePickers 获取时间并获取它们之间的时差。我有一个 NSDate,它有正确的号码并且是正确的。但是当我使用 stringFromDate 时,时间会增加 1 小时。

这是我的代码:

         //recieves 2 time values from UiDatePickers and returns a NSTimeInterval
let time = timeEndValue!.timeIntervalSinceDate(timeStartValue!)

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm"
//Format NSTimeInterval to NSDate. date stores the correct value
let date = NSDate(timeIntervalSinceReferenceDate: time)
//The trouble starts here. Here the time get's one hour more than it should.
let dateString = dateFormatter.stringFromDate(date)

所以...作为 NSDate 的日期具有正确的值。我使用在线工具检查了它,将秒转换为小时和分钟。但是,当我使用 stringFromdate(date) 转换日期时,输出显示的时间比应有的多 1 小时。每次我测试时它都会这样做。我的猜测是它与日期为 UTC 0 而我的时区为 UTC+1 的时区有关,因此当它使用 dateformatter.stringFromDate 进行转换时,它会增加 1 小时左右。

有什么想法吗?

编辑:

Rob 建议使用 NSDateComponentsFormatter,他是绝对正确的。结果如下:

let formatter = NSDateComponentsFormatter()
formatter.allowedUnits = [.NSHourCalendarUnit, .NSMinuteCalendarUnit]
formatter.unitsStyle = .Positional
formatter.zeroFormattingBehavior = .Default
stringV = formatter.stringFromDate(timeStartValue!, toDate: timeEndValue!)!

最佳答案

这是因为 stringFromDate 认为这是一个时间(而不是耗时)并在您所在的时区显示给您。您可以将时区强制设置为 UTC/GMT/Zulu,或者更好的是,使用 NSDateComponentsFormatter 来显示两个日期之间的时间量。例如:

let formatter = NSDateComponentsFormatter()
formatter.allowedUnits = [.Hour, .Minute]
formatter.unitsStyle = .Positional

let string = formatter.stringFromDate(date1, toDate: date2)

NSDateComponentsFormatter 的好处在于它提供了大量其他不错的格式化功能,例如其他 unitsStyle(例如 .Full 将产生一个本地化的字符串),maximumUnitCount(如果你有很长的周期并且宁愿只显示最重要的单位)等。

如果你真的需要00:00补零格式,你也可以手动提取组件并根据需要格式化:

let components = NSCalendar.currentCalendar().components([.Hour, .Minute], fromDate: date1, toDate: date2, options: [])
let string = String(format: "%02d:%02d", components.hour, components.minute)

关于swift - NSDate to string 显示比应有的多 1 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com