swift我当前时间varibale不显示我当前的实际时间

时间:2015-11-13 20:49:52

标签: swift nsdate

所以这是我的问题,当我试图找到我当前的日期和时间时,它比我实际时间提前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)

2 个答案:

答案 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没有任何问题。这是关于不同时区的时间问题。例如,让我们说它是:

  • 晚上9点在芝加哥(UTC -05:00
  • 伦敦凌晨2点(UTC +00:00)←这是NSDate()将返回的内容
  • 凌晨4点在伊斯坦布尔(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