让我举一个例子来说明我想要实现的目标: 假设我在香港[HKT]和我的应用程序,我需要知道美国/锡特卡当前时间是否在晚上5:30之后。 [我必须在一段时间后执行一段代码,并且会在某个时间继续这样做。]
现在在我的应用程序中,我有家庭时区和远程时区的信息。 (具有相同的NSTimeZone对象)
如果需要,我可以使用此代码打印两者的时间。
var nTZ:NSTimeZone = NSTimeZone(name: "America/Sitka")
var dateFormatter: NSDateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "hh:mm a"
dateFormatter.timeZone = NSTimeZone(abbreviation: nTZ.abbreviation!)
var remoteTime: NSSTring = dateFormatter.stringFromDate(NSDate())
现在问题是dateformatter将日期转换为字符串格式。我怎么知道目前在偏远地区的时间是在晚上5:30之后。基本上如何比较时间?
我也试过的一件事是扭转了NSDate的时间。即。获取String日期并转换回NSDate。想法是如果我可以将它转换为日期格式我将尝试某种比较(我还没有弄清楚。)//下面的代码是以前的代码的延续
var dateFormatter2: NSDateFormatter = NSDateFormatter()
dateFormatter2.dateFormat = "HH:mm a"
var tempDateX:NSDate = dateFormatter2.dateFromString(remoteTime)!
println(tempDateX)
这确实显示了一些值,但与原始日期不符。看起来它打印时间减去当前GMT偏移量。不知道为什么。
请帮我解决这个问题。感谢您的帮助。
答案 0 :(得分:1)
示例:
var localTimeString = "5:30"
var localTZ = NSTimeZone.localTimeZone()
var remoteTimeString = "10:24"
var remoteTZ:NSTimeZone? = NSTimeZone(name: "America/Sitka")
var dateFormatter: NSDateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm"
dateFormatter.timeZone = localTZ
var localDate:NSDate = dateFormatter.dateFromString(localTimeString)!
println("localDate: \(localDate)") // localDate: 2000-01-01 10:30:00 +0000
dateFormatter.timeZone = remoteTZ
var remoteDate:NSDate = dateFormatter.dateFromString(remoteTimeString)!
println("remoteDate: \(remoteDate)") // remoteDate: 2000-01-01 19:24:00 +0000
var isLater:NSComparisonResult = localDate.compare(remoteDate)
if isLater == .OrderedAscending {
println("OrderedAscending")
}
else {
println("OrderedDecending")
}
答案 1 :(得分:0)
如果将远程时间计算为“HHmm”,则任务变得更容易 使用24小时“HH”格式,因为那时你可以简单地比较一下 结果字符串为“1730”:
let dateformatter = NSDateFormatter()
dateformatter.timeZone = NSTimeZone(name: "America/Sitka")
dateformatter.dateFormat = "HHmm"
dateformatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
let remoteTime = dateformatter.stringFromDate(NSDate())
if (remoteTime > "1730") {
println("After 5:30 pm in Sitka")
}
(Posix语言环境设置为确保转换独立于 设备设置,比较 What is the best way to deal with the NSDateFormatter locale "feechur"?。)
或者,您可以用数字计算远程小时和分钟
使用NSDateComponents
:
let calendar = NSCalendar.currentCalendar()
calendar.timeZone = NSTimeZone(name: "America/Sitka")
let comp = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: NSDate())
// Or: if comp.hour * 100 + comp.minute > 17 * 100 + 30 { ...
if comp.hour > 17 || (comp.hour == 17 && comp.minute > 30) {
println("After 5:30 pm in Sitka")
}