2015-12-05 120 views
0

我有一个特定小时minut时间戳像这样的字符串:比较字符串与当前时间

let timeToday = "14:00" 

,我想这个时候来比较当前日期的当前时间。我遇到NSDate的问题以及它使用UTC时间戳的事实。我没有带用NSDateNSCalendarNSDateFormatter之前,我在它是如何难治解决这个看似简单的任务有点沮丧......

所以我试图从琴弦组都同时和当前时间,分成两个NSDate变量,然后使用某种比较方法,但我似乎无法在相同的基础上得到它们。

如何获得两个时间戳在同一基本?

所以我有一个NSDate的有:

NSDate: timeToday  // "2015-12-05 14:00:00 +0000" 
NSDate: currentTime // "2015-12-05 22:46:54 +0000" 
+0

+0000指UTC时间 –

+0

我不明白你在问什么。起初我以为你在说你想要看起来像“14:00”的时间字符串,就好像它们是当前时间和当前用户的时区一样。在这种情况下,您需要创建一个NSDateFormatter并为其提供格式字符串“HH:mm”,并简单地使用'dateFromString()'将时间字符串转换为日期。您可以使用相同的日期格式化程序将当前日期显示为时间字符串,这次使用'stringFromDate()' –

+0

您需要咬紧牙关并阅读NSDate,NSDateFormatter,NSCalendar,尤其是部分在关于“日历计算”的NSCalendar文档中。该部分真的很有帮助。这个东西很复杂,有点令人困惑,需要相当深入的学习才能“(http://www.urbandictionary.com/define.php?term=grok)”。 –

回答

0

所以我最终通过对理解数据类型的conpects的文档阅读。 NSDate代表一个时间点,根据您在地球上的位置不同而显示的内容会有所不同。所以使用UTC作为时间字符串和当前时间的基础是完全正确的。

我解决这样的问题,使用:

let calender = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) 
calender!.locale = NSLocale.currentLocale() 

let timeToday = "14:00" 
let timeArray = openToday.componentsSeparatedByString(":") 
let timeTodayHours = Int(timeArray[0]) 
let timeTodayMin = Int(timeArray[1]) 
let timeTodayDate = calender!.dateBySettingHour(timeTodayHours!, minute: openTodayMin!, second: 00, ofDate: NSDate(), options: NSCalendarOptions()) 

let now = NSDate() 
if now.compare(timeTodayDate!) == .OrderedDescending { 
    print(" 'timeToday' has passed!!! ") 
} 
+0

您也可以尝试使用NSDateComponents并在其上设置小时。 –