年、月、日、時、分、秒の両方のNSDateを特定のスタイルにフォーマットする


132

基本的に、現在の日付と時刻を個別に取得する必要があります。

2009-04-26 
11:06:54

以下のコードは、同じトピックに関する別の質問から、生成されます

今:| 2009-06-01 23:18:23 +0100 | 
dateString:| 2009年6月1日23:18 | 
解析済み:| 2009-06-01 23:18:00 +0100 |

これはほとんど私が探しているものですが、日付と時間を分けたいのです。

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];

NSDate *now = [[NSDate alloc] init];

NSString *dateString = [format stringFromDate:now];

NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy"];

NSDate *parsed = [inFormat dateFromString:dateString];

NSLog(@"\n"
"now:        |%@| \n"
"dateString: |%@| \n"
"parsed:     |%@|", now, dateString, parsed);

1
このような問題を解決するために使用したコードを時間をかけて作成した場合、おそらく投稿の編集ではなく、答え(この場合はedit2以下のすべて)を回答に貼り付けます。どちらの方法でも大したことではありませんが、問題の解決策であることを簡単に見つけて確認できます。
ローレンスジョンストン

回答:


72

iPhone形式の文字列はUnicode形式です。リンクの後ろには、上記のすべての文字が何を意味するかを説明する表があり、独自の文字を作成できます。

そしてもちろん、日付フォーマッターを使い終わったらリリースすることを忘れないでください。上記のコードは、漏れformatnowおよびinFormat


ARCを有効にしてもリークしますか?
Dimme 2013年

19
上記は、ARCの下でのリークはありません(もちろん、この議論があった2009年には、ARCは利用できませんでした)。
Rob Napier

194

これは私が使用したものです:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"HH:mm:ss"];

NSDate *now = [[NSDate alloc] init];

NSString *theDate = [dateFormat stringFromDate:now];
NSString *theTime = [timeFormat stringFromDate:now];

NSLog(@"\n"
      "theDate: |%@| \n"
      "theTime: |%@| \n"
      , theDate, theTime);

[dateFormat release];
[timeFormat release];
[now release];

12

このメソッドを使用して、日付を渡すだけです

-(NSString *)getDateFromString:(NSString *)string
{

    NSString * dateString = [NSString stringWithFormat: @"%@",string];

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"your current date format"];
    NSDate* myDate = [dateFormatter dateFromString:dateString];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"your desired format"];
    NSString *stringFromDate = [formatter stringFromDate:myDate];

    NSLog(@"%@", stringFromDate);
    return stringFromDate;
}

11
    NSDateFormatter *dateformat = [[NSDateFormatter alloc] init];
    [dateformat setDateFormat:@"Your Date Format"];

返すフォーマットを設定します...

yyyy-MM-dd返却2015-12-17

yyyy-MMM-dd 返却2015-Dec-17

yy-MM-dd返却15-12-17

dd-MM-yy 返却17-12-15

dd-MM-yyyy 返却17-12-2015

yyyy-MMM-dd HH:mm:ss 返却2015-Dec-17 08:07:13日時

yyyy-MMM-dd HH:mm 返却2015-Dec-17 08:07日時

詳細については、Click Nowの日付と時刻の形式をご覧ください。

ありがとうございました.....


1
コードサンプルとともに追加の説明を入力してください。
Maciej Lach

私はこの日付を持っています '2018-06-08T07:30:05.391Z'私は 'yyyy-MM-dd'T'HH:mm:ss.000Z'を試しましたが、値がありません。
Pramod Tapaniya

4

新しいものは何もありませんが、私の方法を共有したい:

+(NSString*) getDateStringFromSrcFormat:(NSString *) srcFormat destFormat:(NSString *)
destFormat scrString:(NSString *) srcString
{
    NSString *dateString = srcString;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //[dateFormatter setDateFormat:@"MM-dd-yyyy"];
    [dateFormatter setDateFormat:srcFormat];
    NSDate *date = [dateFormatter dateFromString:dateString];

    // Convert date object into desired format
    //[dateFormatter setDateFormat:@"yyyy-MM-dd"];
    [dateFormatter setDateFormat:destFormat];
    NSString *newDateString = [dateFormatter stringFromDate:date];
    return newDateString;
}

3

迅速に

var dateString:String = "2014-05-20";
var dateFmt = NSDateFormatter()
// the format you want
dateFmt.dateFormat = "yyyy-MM-dd"
var date1:NSDate = dateFmt.dateFromString(dateString)!;

0

スウィフト3

extension Date {
    
    func toString(template: String) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: template, options: 0, locale: NSLocale.current)
        return formatter.string(from: self)
    }
    
}

使用法

let now = Date()
let nowStr0 = now.toString(template: "EEEEdMMM") // Tuesday, May 9
let nowStr1 = now.toString(template: "yyyy-MM-dd") // 2017-05-09
let nowStr2 = now.toString(template: "HH:mm:ss") // 17:47:09

ニーズに合わせてテンプレートで遊んでください。必要なテンプレートの作成に役立つ例とドキュメントはこちら

注意

たとえばDateFormatter、それを使用する予定がある場合は、キャッシュすることをお勧めしTableViewます。アイデアを与えるために、ループ1000の日付は私に取った0.5秒以上の使用toString(template: String)に比べて、機能を0.05秒使用しますmyFormatter.string(from: Date)


そのメモをより強くするために(非常に重要であるため)、新しいインスタンスのデフォルト値を持つオプションのパラメーターを使用するように関数をリファクタリングできます。なぜあなたが反対票を投じたのかわからないので、私は反対票を入れています。
Vive

-6
NSDate *date         = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"]
NSString *dateString  = [df stringFromDate:date];
[df setDateFormat:@"hh:mm:ss"];
NSString *hoursString = [df stringFromDate:date];

それで終わりです。必要なものはすべて手に入りました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.