从2016-02-10 00:00:00之类的日期删除时间

时间:2016-02-14 13:48:58

标签: ios swift nsdate nsdateformatter

你好我有这样的日期

2016-02-10 00:00:00

我想从这个样式中只获得它的日期

14.05.2016 or 14-05-2016

这就是我试过的

let dateFormatter = NSDateFormatter()
let date = "2016-02-10 00:00:00"
dateFormatter.dateFormat = "dd-MM-yyyy"
let newdate = dateFormatter.dateFromString(date)
print(newdate) //nil is coming

10 个答案:

答案 0 :(得分:22)

比建议版本更好的方法是不使用字符串格式化程序从日期转换,而是使用日历:

public func removeTimeStamp(fromDate: Date) -> Date {
    guard let date = Calendar.current.date(from: Calendar.current.dateComponents([.year, .month, .day], from: fromDate)) else {
        fatalError("Failed to strip time from Date object")
    }
    return date
}

答案 1 :(得分:3)

好吧我自己解决了这个问题

  let date = "2016-02-10 00:00:00"
  let dateFormatter = NSDateFormatter()

  dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
  let dateFromString : NSDate = dateFormatter.dateFromString(date)!
  dateFormatter.dateFormat = "dd-MM-yyyy"
  let datenew= dateFormatter.stringFromDate(dateFromString)

    print(datenew)

答案 2 :(得分:2)

您的代码不正确。

如果您要使用NSDate

NSDateFormatter实例转换为字符串

您使用此代码:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
let dateString = dateFormatter.stringFromDate(date)

您的代码中的问题是您有一个值为2016-02-10 00:00:00的日期字符串,但您使用日期格式“dd-MM-yyyy”对其进行解析,这就是您获得nil Date的原因。

相反,您需要先使用dateFormatter.dateFormat = "yyy-MM-dd hh:mm:ss"

解析它

答案 3 :(得分:2)

在日期上使用扩展名:

extension Date {
    public var removeTimeStamp : Date? {
       guard let date = Calendar.current.date(from: Calendar.current.dateComponents([.year, .month, .day], from: self)) else {
        return nil
       }
       return date
   }
}

用法:

let now = Date()
let nowWithouTime = now.removeTimeStamp

答案 4 :(得分:1)

如果您有一种格式的输入日期字符串(或者更确切地说,日期和时间字符串),并且您想要以不同的格式输出,那么您需要2个日期格式化程序:采用源字符串格式的输入格式化程序将其转换为NSDate(使用dateFromString),然后转换为输出格式化程序,它接受NSDate并将其转换为输出日期字符串(使用stringFromDate)。

您的代码错误,因为您正在创建为输出日期字符串格式配置的日期格式化程序,并尝试使用它将输入日期字符串转换为NSDate。

我不是NSDateFormatter日期字符串的专家。每当我需要与他们合作时,我必须挖掘文档并找出解决我正在努力解决的具体问题的方法。因此,我将把这部分问题留给你。我只想说你需要一个输入日期格式化程序,它使用格式字符串完全匹配输入日期字符串的格式。这可能很棘手,因为如果它不完全正确,它只会失败并返回一个nil NSDate。 输出日期格式化程序更容易,因为如果它不太正确,您的输出日期将不会像您希望的那样,但这很明显。

答案 5 :(得分:1)

建议您使用库SwiftDate和许多方便的选项。 对于您的情况,使用日期截断例如:

let date = "2017-07-22 15:03:50".toDate("yyyy-MM-dd HH:mm:ss", region: rome)
let truncatedTime = date.dateTruncated(from: .hour) // 2017-07-22T00:00:00+02:00

答案 6 :(得分:0)

对于Swift 4及更高版本,您可以使用以下代码

 let date = "2016-02-10 00:00:00"
 let dateFormatter = DateFormatter()
 let date = modelDeals.dealItemInDetail?.validTo ?? ""
 dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
 let dateFromString : NSDate = dateFormatter.date(from: date)! as NSDate
 dateFormatter.dateFormat = "dd-MM-yyyy"
 let datenew = dateFormatter.string(from: dateFromString as Date)

答案 7 :(得分:0)

Swift 5.5+

使用formatted(_:)

let now = Date.now
let date = now.formatted(.iso8601.year().month().day().dateSeparator(.dash))

formatted(date:time:)

let now = Date.now
let date = now.formatted(date: .abbreviated, time: .omitted)

您可以使用 DateStyle 代替 .abbreviated,例如 .long.numeric。 还有其他一些 DateStyle,例如 .abbreviated.long.numeric

https://developer.apple.com

答案 8 :(得分:-1)

Swift 3版本:

let date = "2016-02-10 00:00:00"
let dateformater = DateFormatter()
    dateformater.dateFormat = "dd-MM-YYYY"
    let dateString = dateformater.date(from: date)

    //print date
    print(dateString)

答案 9 :(得分:-1)

对于 :( Swift 3)应用程序,

如果您使用Date()个对象,请务必设置timeStyle DateFormatter()none

示例:

let today = Date()
let dateFormatter = DateFormatter()
//dateFormatter.dateFormat = "yyyy-MM-dd", upto you
dateFormatter.dateFormat = "dd-MM-yyyy"
//This is Important!
dateFormatter.timeStyle = DateTimeFormatter.Style.none
let dateString = dateFormatter.string(from: today)