从这样的日期中删除时间 2016-02-10 00:00:00

问题描述 投票:0回答:11

你好,我有一个这样的约会

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
ios swift nsdate nsdateformatter
11个回答
44
投票

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

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
}

19
投票

在日期上使用扩展名:

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

7
投票

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

  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)

6
投票

斯威夫特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

https://developer.apple.com


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"

解析它

1
投票

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

dateFromString
),然后是一个输出格式化程序,它接受 NSDate 并将其转换为输出日期字符串(使用
stringFromDate
)。

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

我不是 NSDateFormatter 日期字符串方面的专家。任何时候我需要与他们合作,我都必须挖掘文档并找出我想要解决的特定问题的解决方案。因此,我将把这部分问题留给你。可以说,您需要一个输入日期格式化程序,它使用的格式字符串“完全”匹配您的输入日期字符串的格式。这可能很棘手,因为如果它不完全正确,它就会失败并返回 nil NSDate。 输出日期格式化程序更容易,因为如果它不太正确,您的输出日期将不会像您想要的那样,但这将是显而易见的。


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



0
投票

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)



0
投票

extension Date { public var removeTimeStamp : Date? { var calendar = Calendar(identifier: .gregorian) calendar.timeZone = TimeZone(identifier: "UTC")! guard let date = calendar.date(from: Calendar.current.dateComponents([.year, .month, .day], from: self)) else { return nil } return date } }



-1
投票
swift

:(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)



-1
投票

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

	
© www.soinside.com 2019 - 2024. All rights reserved.