Search code examples
swiftdatensdateformatterdateformatter

What is the correct date.format for MMM dd, yyyy hh:mm:ss a? and how convert to dd-mm-yyyy HH:ii


I want convert this: Dec 31, 2017 8:00:00 PM to dd-mm-yyyy HH:ii format in Swift 4.

This is my code so far:

let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MMM dd, yyyy hh:mm:ss a"//this your string date format

    if let translatedDate = dateFormatter.date(from: datetime) {
        dateFormatter.dateFormat = "dd-MM-yyyy HH:ii"
        return dateFormatter.string(from: translatedDate)
    }

The code never enters in the if statement. I guess my date format is not correct.


Solution

  • A DateFormatter that converts between dates and their textual representations.

    You can find more Locale identifier here.

    • first, convert your date to local time zone. using a Locale class
    • after you can covert the date in specific formate.

    And try this code.

    let dateStr = "Wed, 26 Jul 2017 18:10:02 +0530"
    if let date = Date(fromString: dateStr, format: "MMM dd, yyyy hh:mm:ss a") {
            debugPrint(date.toString(format: "dd-MM-yyyy HH:ii"))
    }
    

    Date Extension is ...

    extension Date {
    
        // Initializes Date from string and format
        public init?(fromString string: String, format: String, identifier: String = Locale.current.identifier) {
            let formatter = DateFormatter()
            formatter.dateFormat = format
            formatter.locale = Locale(identifier: identifier)
            if let date = formatter.date(from: string) {
                self = date
            } else {
                return nil
            }
        }
    
        // Converts Date to String, with format
        public func toString(format: String, identifier: String = Locale.current.identifier) -> String {
            let formatter = DateFormatter()
            formatter.locale = Locale(identifier: identifier)
            formatter.dateFormat = format
            return formatter.string(from: self)
        }
    }
    

    String Extension is ...

    extension String {
        // Converts String to formated date string, with inputFormat and outputFormat
        public func toDate(form inputFormat: String, to outputFormat: String, identifier: String = Locale.current.identifier) -> String? {
            return Date(fromString: self, format: inputFormat, identifier: identifier)?.toString(format: outputFormat, identifier: identifier)
        }
    
        // Converts String to Date, with format
        func toDate(format: String, identifier: String = Locale.current.identifier) -> Date? {
            return Date(fromString: self, format: format, identifier: identifier)
        }
    }