การจัดรูปแบบ NSDate เป็นรูปแบบเฉพาะสำหรับทั้งปีเดือนวันและชั่วโมงนาทีวินาที


132

โดยพื้นฐานแล้วฉันต้องได้รับวันที่และเวลาปัจจุบันแยกกันโดยจัดรูปแบบเป็น:

2552-04-26 
11:06:54 น

สร้างรหัสด้านล่างจากคำถามอื่นในหัวข้อเดียวกัน

ตอนนี้: | 2009-06-01 23:18:23 +0100 | 
dateString: | 01 มิ.ย. 2552 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) ในคำตอบแทนที่จะแก้ไขโพสต์ของคุณ ไม่ใช่เรื่องใหญ่ แต่อย่างใด แต่มันทำให้ง่ายขึ้นเล็กน้อยในการค้นหา / ดูว่าเป็นวิธีแก้ปัญหาสำหรับคำถาม
Lawrence Johnston

คำตอบ:


72

สตริงรูปแบบ iPhone อยู่ในรูปแบบ Unicode ด้านหลังลิงก์เป็นตารางที่อธิบายความหมายของตัวอักษรทั้งหมดข้างต้นเพื่อให้คุณสามารถสร้างของคุณเองได้

และแน่นอนอย่าลืมปล่อยรูปแบบวันที่ของคุณเมื่อคุณทำเสร็จแล้ว รั่วโค้ดข้างต้นformat, และnowinFormat


รั่วไหลแม้เปิดใช้งาน ARC?
Dimme

19
ข้างต้นจะไม่มีการรั่วไหลใด ๆ ภายใต้ ARC (แน่นอนว่า ARC ไม่สามารถใช้ได้ในปี 2009 เมื่อเรามีการสนทนานี้)
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-dd2015-12-17วันกลับ

yyyy-MMM-dd2015-Dec-17วัน กลับ

yy-MM-dd15-12-17วันกลับ

dd-MM-yy17-12-15วัน กลับ

dd-MM-yyyy17-12-2015วัน กลับ

yyyy-MMM-dd HH:mm:ss2015-Dec-17 08:07:13วันที่และเวลา กลับ

yyyy-MMM-dd HH:mm2015-Dec-17 08:07วันที่และเวลา กลับ

สำหรับรายละเอียดข้อมูลเพิ่มเติมและรูปแบบเวลาสำหรับคลิกเลย

ขอบคุณ.....


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.