Swift相当于GMC时间?
将一个C代码迁移到Swift时,对应的代码是什么Swift相当于GMC时间?,swift,date,Swift,Date,将一个C代码迁移到Swift时,对应的代码是什么 time(&CurrentTime); tm = gmtime(&CurrentTime); dayOfYear = tm->tm_yday + 1; st = tm->tm_hour + tm->tm_min / 60.0 + tm->tm_sec / 3600.0; 我目前将其转换为以下内容,但我猜有些地方出了问题(可能是时间的开始?): 首先,您可以从Swift调用这些C库函数: var curre
time(&CurrentTime);
tm = gmtime(&CurrentTime);
dayOfYear = tm->tm_yday + 1;
st = tm->tm_hour + tm->tm_min / 60.0 + tm->tm_sec / 3600.0;
我目前将其转换为以下内容,但我猜有些地方出了问题(可能是时间的开始?):
首先,您可以从Swift调用这些C库函数:
var currentTime = time(nil)
let tm = gmtime(¤tTime).pointee
let dayOfYear = tm.tm_yday + 1
let st = Double(tm.tm_hour) + Double(tm.tm_min) / 60.0 + Double(tm.tm_sec) / 3600.0
gmtime()
在不调整时区的情况下转换时间值。
为了获得与日历相同的结果
您必须将其时区设置为GMT:
var calendar = Calendar.current
calendar.timeZone = TimeZone(secondsFromGMT: 0)!
calendar.ordinality(of:…)
的返回值基于,
因此,您不能添加1
:
let dayOfYear = calendar.ordinality(of: .day, in: .year, for: currentTime)!
最后,您可以通过一次调用检索多个日期组件:
let comps = calendar.dateComponents([.hour, .minute, .second], from: currentTime)
let st = Double(comps.hour!) + Double(comps.minute!)/60 + Double(comps.second!)/3600
看起来您正在尝试获取从一天开始(GMT)起的浮点小时数。您还可以通过以下方式实现这一点:
var calendar = Calendar.current
calendar.timeZone = TimeZone(secondsFromGMT: 0)!
let now = Date()
let startOfDay = calendar.startOfDay(for: now)
let hours = now.timeIntervalSince(startOfDay) / 60 / 60
到底出了什么问题?你想在这里干什么?
var calendar = Calendar.current
calendar.timeZone = TimeZone(secondsFromGMT: 0)!
let now = Date()
let startOfDay = calendar.startOfDay(for: now)
let hours = now.timeIntervalSince(startOfDay) / 60 / 60