4

文字列から別の形式に日付をフォーマットしようとしています。

例:2012-05-29 23:55:52into 29/05 *newline* 2010

NSDateとNSDateFormatterの背後にあるロジックがわからないと思います。

どんな助けでもありがたいです。ありがとう :)

4

5 に答える 5

9

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;

そして出来上がり!あなたはあなたの新しい日付を持っています:)

于 2010-05-30T15:34:21.510 に答える
1

単純な文字列処理のみを行っている場合は、日付オブジェクトを調べる必要はありません。

 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)
于 2016-07-22T01:43:38.327 に答える
0

日付をある形式から別の形式に変換するには、次のコードを見つけてください。それはあなたの現在のゾーンで時間を与えます。

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 ""
    }
}
于 2018-03-24T13:27:48.607 に答える
0

拡張機能を使用したい方のために。

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")
于 2019-05-22T11:17:52.210 に答える
0

JFrankの答えは良いです。しかし、Appleは言います:

「効率のためのキャッシュフォーマッタ」(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

     }


}
于 2019-12-09T13:09:50.740 に答える