NSDateFormatter 在删除时间时减去一天

Veg*_*Flo 0 nsdateformatter swift

我正在尝试使用 NSDateFormatter 从日期中删除时间。这是代码:

func dateWithOutTime( datDate: NSDate?) -> NSDate {

    let formatter = NSDateFormatter()
    formatter.dateFormat = "dd-MM-yyyy"
    let stringDate: String = formatter.stringFromDate(datDate!)
    let dateFromString = formatter.dateFromString(stringDate)

return dateFromString!
}
Run Code Online (Sandbox Code Playgroud)

如果我发送前 04-01-2016 12:00:00,返回是 03-01-2016 23:00:00 我已经尝试更改 dateFormat,但它仍然保持从日期中减去一天......为什么?请帮忙 :)

vad*_*ian 5

最简单的方法是使用startOfDayForDateNSCalendar

斯威夫特 2:

func dateWithOutTime( datDate: NSDate) -> NSDate {
    return NSCalendar.currentCalendar().startOfDayForDate(datDate)
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特 3+:

func dateWithOutTime(datDate: Date) -> Date {
    return Calendar.current.startOfDay(for: datDate)
}
Run Code Online (Sandbox Code Playgroud)

或将时区调整为 UTC/GMT

斯威夫特 2:

func dateWithOutTime( datDate: NSDate) -> NSDate {
  let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
  calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0)
  return calendar.startOfDayForDate(datDate)
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特 3+:

func dateWithOutTime(datDate: Date) -> Date {
  var calendar = Calendar(identifier: .gregorian)
  calendar.timeZone = TimeZone(secondsFromGMT: 0)!
  return calendar.startOfDay(for: datDate)
}
Run Code Online (Sandbox Code Playgroud)

  • 您的时区可能是 UTC +1,所以实际上时间是正确的。如果您确实需要 UTC 时间,请设置日历的时区。我更新了答案。 (2认同)