Iphone 从字符串格式化日期

Iphone 从字符串格式化日期,iphone,nsstring,nsdate,nsdateformatter,Iphone,Nsstring,Nsdate,Nsdateformatter,我正在尝试将日期从字符串格式化为另一种格式 例如:2012-05-29 23:55:52进入29/05*newline*2010 我只是不明白NSDate和NSDateFormatter背后的逻辑,我想 任何帮助都将不胜感激。谢谢:)您需要创建一个NSDateFormatter,然后将其日期格式设置为与您的第一个日期匹配,例如: NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setD

我正在尝试将日期从字符串格式化为另一种格式

例如:
2012-05-29 23:55:52
进入
29/05*newline*2010

我只是不明白NSDate和NSDateFormatter背后的逻辑,我想


任何帮助都将不胜感激。谢谢:)

您需要创建一个NSDateFormatter,然后将其日期格式设置为与您的第一个日期匹配,例如:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
这将设置日期格式化程序以识别日期字符串。然后,您可以使用以下方法从中获取NSDate对象:

NSDate *myDate = [dateFormatter dateFromString:myDateString]; // myDateString is the 2012-05-29 23:55:52 string
这将为您提供表示该日期的完整NSDate对象。现在,您需要重新格式化日期并将其转换回字符串,因此将格式化程序上的dateFormat设置为新格式,并获取返回日期的新字符串表示形式:

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

瞧!您有了新的日期:)

如果您只进行简单的字符串处理,则实际上不需要遍历日期对象

 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)

请查找以下代码以将日期从一种格式转换为另一种格式。它会给你在当前区域的时间

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 ""
    }
}

对于那些喜欢使用扩展的人

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
    }
}
使用:


我的回答很好。但苹果表示:

“高效缓存格式化程序”(Cache Formatters for Efficiency)()以避免分配和丢弃。 所以,由于静力学已经很懒惰了

(为清晰起见,我仅显示生成日期..输出格式类似..)


相关:谢谢!我不知道你可以通过这种方式从约会中得到一个字符串!我以前从来没有这样想过——这实际上是一个很好的解决方案,而且它使用的资源可能比日期对象少。谢谢
tfDate.text = strDate.formattedDate(inputFormat: "yyyy-MM-dd", outputFormat: "dd/MM/yyyy")
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

     }


}