我正在尝试将日期从字符串格式化为另一种格式。
例如:2012-05-29 23:55:52
进入29/05 *newline* 2010
.
我只是不明白 NSDate 和 NSDateFormatter 背后的逻辑,我想..
任何帮助将不胜感激。谢谢 :)
我正在尝试将日期从字符串格式化为另一种格式。
例如:2012-05-29 23:55:52
进入29/05 *newline* 2010
.
我只是不明白 NSDate 和 NSDateFormatter 背后的逻辑,我想..
任何帮助将不胜感激。谢谢 :)
您将需要创建一个 NSDateFormatter,然后将其设置为 dateFormat 以匹配您拥有的第一个日期,例如:
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 ""
}
}
JFrank 的回答很好。但苹果说:
“缓存格式化程序以提高效率”(https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html)来避免分配和丢弃。所以,因为静态已经很懒了......
(为清楚起见,我只显示生成日期.. 输出格式类似..)
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
}
}
对于那些喜欢使用扩展的人。
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
}
}
利用:
tfDate.text = strDate.formattedDate(inputFormat: "yyyy-MM-dd", outputFormat: "dd/MM/yyyy")