Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 日期计算返回了错误的值_Swift_Date - Fatal编程技术网

Swift 日期计算返回了错误的值

Swift 日期计算返回了错误的值,swift,date,Swift,Date,我试图计算两个日期之间的差异,以秒为单位。下面的代码返回不正确的值(与现有的perl脚本相比,手动和使用web)。我遵循了论坛上发布的许多建议,但返回的结果并不正确。请告知 操场如下: 主要错误是日期格式:mm是分钟,mm是月 然而,Calendar计算日期差异比可怕的86400数学更可靠 或使用DateComponents let startMon = 05 let startMday = 26 let startYear = 2016 let startComponents = DateCo

我试图计算两个日期之间的差异,以秒为单位。下面的代码返回不正确的值(与现有的perl脚本相比,手动和使用web)。我遵循了论坛上发布的许多建议,但返回的结果并不正确。请告知

操场如下:


主要错误是日期格式:
mm
是分钟,
mm
是月

然而,
Calendar
计算日期差异比可怕的86400数学更可靠

或使用
DateComponents

let startMon = 05
let startMday = 26
let startYear = 2016
let startComponents = DateComponents(year: startYear, month: startMon, day: startMday)
let nowComponents = Calendar.current.dateComponents([.year, .month, .day], from: Date())

let difference = Calendar.current.dateComponents([.year, .month, .day], from: startComponents, to: nowComponents)
print(difference)

对于初学者:月份的日期格式为“MM”,而不是“MM”。记录在案。确实如此。一个简单的
打印(startDateFormatted)
会显示
2016-01-25 22:00:00+0000
@Brad:调试似乎是一门垂死的艺术…不是这个老的PDP 11宏黑客的作品…谢谢你的更正和提示。听起来我需要离开86400数学。@vadian在解析固定日期格式时,您忘记将DateFormatter的区域设置设置为
“en_US_POSIX”
,并将其日历设置为
。gregorian
@瓦迪安,我如何打印两个日期之间的秒差?而不是使用
[.year、.month、.day]
使用
[.second]
let startMon = 05
let startMday = 26
let startYear = 2016
let startDateStr = "\(startYear)/\(startMon)/\(startMday)"

let dateFormatter = DateFormatter()
let currentDate = Date()
dateFormatter.locale = Locale(identifier : "en_US_POSIX")
dateFormatter.dateFormat = "yyyy/MM/dd"
let startDateFormatted = dateFormatter.date(from: startDateStr)

let difference = Calendar.current.dateComponents([.year, .month, .day], from: startDateFormatted!, to: Date())
print(difference)
let startMon = 05
let startMday = 26
let startYear = 2016
let startComponents = DateComponents(year: startYear, month: startMon, day: startMday)
let nowComponents = Calendar.current.dateComponents([.year, .month, .day], from: Date())

let difference = Calendar.current.dateComponents([.year, .month, .day], from: startComponents, to: nowComponents)
print(difference)