Format a date from a string

前端 未结 5 1861
盖世英雄少女心
盖世英雄少女心 2020-12-10 08:37

I\'m trying to format a date from a string into another format.

For example: 2012-05-29 23:55:52 into 29/05 *newline* 2010.

I just

相关标签:
5条回答
  • 2020-12-10 08:57

    JFrank answer is good. But Apple says:

    "Cache Formatters for Efficiency" (https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html) to void allocating and discarding. So, as statics are already lazy...

    (For clarity I show only generating a date.. output format is similar..)

    import Foundation
    
    
    extension Date{
    
    
        // Global constants and variables are always computed lazily:
        static private var yyyyMMdd_dateFormatter : DateFormatter  {
            let df = DateFormatter()
            df.dateFormat = "yyyyMMdd"
            return df
        }
    
    
        init?(YYYYMMDDString: String?){
    
            guard let dateString = YYYYMMDDString else {return nil}
    
            guard let date = Self.yyyyMMdd_dateFormatter.date(from: dateString) else {
                return nil
            }
                self = date
    
         }
    
    
    }
    
    0 讨论(0)
  • 2020-12-10 08:58

    Please find following code to convert date from one format to another format. It will give time in your current zone.

    func convertDateFormat(sourceString : String, sourceFormat : String, destinationFormat : String) -> String{
    
        let dateFormatter = DateFormatter();
        dateFormatter.dateFormat = sourceFormat;
    
        if let date = dateFormatter.date(from: sourceString){
            dateFormatter.dateFormat = destinationFormat;
            return dateFormatter.string(from: date)
        }else{
            return ""
        }
    }
    
    0 讨论(0)
  • 2020-12-10 09:05

    For those who prefer to use extension.

    extension String {
    func formattedDate(inputFormat: String, outputFormat: String) -> String {
        let inputFormatter = DateFormatter()
        inputFormatter.dateFormat = inputFormat
    
        if let date = inputFormatter.date(from: self) {
            let outputFormatter = DateFormatter()
            outputFormatter.dateFormat = outputFormat
            return outputFormatter.string(from: date)
        } else {
            return self  // If the string is not in the correct format, we return it without formatting
        }
    }
    

    Use:

    tfDate.text = strDate.formattedDate(inputFormat: "yyyy-MM-dd", outputFormat: "dd/MM/yyyy")
    
    0 讨论(0)
  • 2020-12-10 09:11

    You will need to create an NSDateFormatter, and then set it's dateFormat to match the first date you have, eg:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    

    That will set your date formatter to recognise your date string. You can then obtain an NSDate object from this using

    NSDate *myDate = [dateFormatter dateFromString:myDateString]; // myDateString is the 2012-05-29 23:55:52 string
    

    This gives you a full NSDate object representing that date. Now you need to reformat the date and turn it back into a string, so set the dateFormat on your formatter to the new format, and get a new string representation of the returned date:

    [dateFormatter setDateFormat:@"dd/MM\nyyyy"];
    NSString *newlyFormattedDateString = [dateFormatter stringFromDate:myDate];
    [dateFormatter release], dateFormatter = nil;
    

    And voila! You have your new date :)

    0 讨论(0)
  • 2020-12-10 09:17

    If you're only doing simple string processing, Going through a date object is not really needed.

     let dateString = "2012-05-29 23:55:52"
     let dateParts = dateString.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: "- :")) 
     let newDateString = "\(dateParts[2])/\(dateParts[1])\n\(dateParts[0])"
    
     print(newDateString)
    
    0 讨论(0)
提交回复
热议问题