所以这是我的问题,当我试图找到我当前的日期和时间时,它比我实际时间提前7小时。示例实际当前时间=下午1点,xcode当前时间下午8点。我想获得用户时区的当前时间。有什么建议?
好吧,让我重新讲述我的要求。我已设法将解析后的endDate转换为日期。我知道如何使用NSDate获取当前日期,但现在不是时候。如何将时间更改为正确的时间?请使用一步一步的计划,所以我知道将来如何处理这个问题。感谢您的所有投入!
// get end date
let DateEnd = object.objectForKey("Ends") as! String
let currentDate = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.timeZone = NSTimeZone(name: "UTC")
//dateFormatter.timeZone = NSTimeZone(name: "GMT")
dateFormatter.dateFormat = "MM/dd/yy, hh:mm a"
let date = dateFormatter.dateFromString(parseDateEnd)
print(date)
print(currentDate)
答案 0 :(得分:0)
NSDate
始终以UTC格式存储其数据。无论您要转换为哪个时区,都必须告诉dateFormatter
这样做。此外,如果您执行print(currentDate)
,它将始终以UTC显示时间。您必须首先格式化。
let dateFormatter = NSDateFormatter()
dateFormatter.timeZone = NSTimeZone.defaultTimeZone()
dateFormatter.dateFormat = "MM/dd/yy, hh:mm a"
let currentDate = NSDate()
print(currentDate) // 2015-11-13 22:02:09 +0000
print(dateFormatter.stringFromDate(currentDate)) // 11/13/15, 05:02 PM
我的时区是EST(-05:00)。我的猜测是你在-07:00时区。
您的Swift或Xcode没有任何问题。这是关于不同时区的时间问题。例如,让我们说它是:
UTC -05:00
)UTC +00:00
)←这是NSDate()
将返回的内容UTC +02:00
)。它们代表的是同一时刻,但根据您所处的位置,不同的时钟位置。在一年的这个时候,UTC = GMT =伦敦的时间。如果您要拨打NSDate()
,无论您身在何处,它都将始终以UTC格式返回时间。所以你会在凌晨2点到达。
要获得当地时间,您必须将格式化为您的时区。 dateFormatter
的默认时区是UTC。因此,您必须通过以下方式将其更改为您当地的时区:
dateFormatter.timeZone = NSTimeZone.defaultTimeZone()
答案 1 :(得分:0)
let dateFormatter = NSDateFormatter()
NSTimeZone.defaultTimeZone()
dateFormatter.timeZone = NSTimeZone.defaultTimeZone()
dateFormatter.timeStyle = .LongStyle
dateFormatter.dateStyle = .ShortStyle
let currentDate = NSDate()
dateFormatter.stringFromDate(currentDate)
print(currentDate)
/* prints your Zulu time with POSIX format
2015-11-14 01:48:30 +0000
*/
print(dateFormatter.stringFromDate(currentDate))
/* prints your localized version
* localized date and time with your time offset
* as is preset in your computer
14/11/15 02:49:13 GMT+1
/*
...
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale(localeIdentifier: "")
dateFormatter.timeStyle = .LongStyle
dateFormatter.dateStyle = .ShortStyle
if let dateFromString = dateFormatter.dateFromString("2015-11-14 08:10:15 GMT-7") {
print(dateFromString)
// print
// 2015-11-14 15:10:15 +0000
//
//
// 2015-11-14 15:10:15 +0000 == 2015-11-14 08:10:15 GMT-7
//
//
}
比较日期
let date1 = dateFormatter.dateFromString("2015-11-14 08:10:15 GMT-7")
let date2 = dateFormatter.dateFromString("2015-11-14 15:10:15 +0000")
if let date1 = date1, let date2 = date2 {
date1.compare(date2) == NSComparisonResult.OrderedSame // true !!!
}
..时差
let date1 = dateFormatter.dateFromString("2015-11-14 01:10:15 GMT-7")
let date2 = dateFormatter.dateFromString("2015-11-14 15:10:15 +0000")
if let date1 = date1, let date2 = date2 {
date1.compare(date2) == NSComparisonResult.OrderedSame // false !
date1.timeIntervalSince1970 - date2.timeIntervalSince1970 == -25200 // true
date1.timeIntervalSinceDate(date2) == -25200 // true
// the difference is in secons ( 7 hours * 3600 = 25200 seconds
}
...相同的数据,其他形式的时间字符串,手动设置时间偏移量
dateFormatter.dateStyle = .NoStyle
dateFormatter.timeStyle = .MediumStyle
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: -7*3600) // GMT-7
let date1 = dateFormatter.dateFromString("01:10:15")
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0*3600) // GMT+0
let date2 = dateFormatter.dateFromString("15:10:15")
if let date1 = date1, let date2 = date2 {
date1.compare(date2) == NSComparisonResult.OrderedSame // false !
date1.timeIntervalSince1970 - date2.timeIntervalSince1970 == -25200 // true
date1.timeIntervalSinceDate(date2) == -25200 // true
// the difference is in secons ( 7 hours * 3600 = 25200 seconds
}
...现在是date1和date2 ????
print(date1!) // 2000-01-01 08:10:15 +0000
print(date2!) // 2000-01-01 15:10:15 +0000