Định dạng NSDate thành các kiểu cụ thể cho cả năm, tháng, ngày và giờ, phút, giây


132

Về cơ bản tôi cần lấy ngày và giờ hiện tại một cách riêng biệt, được định dạng là:

2009-04-26 
11:06:54

Mã dưới đây, từ một câu hỏi khác trong cùng chủ đề, tạo ra

ngay bây giờ: | 2009-06-01 23:18:23 +0100 | 
dateString: | ngày 01 tháng 6 năm 2009 23: 18 | 
phân tích cú pháp: | 2009-06-01 23:18:00 +0100 |

Đây gần như là những gì tôi đang tìm kiếm, nhưng tôi muốn tách biệt ngày và giờ.

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
Trong trường hợp như thế này khi bạn dành thời gian để viết mã mà bạn đã sử dụng để giải quyết vấn đề, tôi có thể sẽ dán nó (trong trường hợp này là mọi thứ bên dưới chỉnh sửa2) trong câu trả lời thay vì chỉnh sửa bài đăng của bạn. Không phải là một vấn đề lớn, nhưng nó làm cho nó dễ dàng hơn một chút để tìm / thấy rằng đó là một giải pháp cho câu hỏi.
Lawrence Johnston

Câu trả lời:


72

Chuỗi định dạng iPhone có định dạng Unicode . Đằng sau liên kết là một bảng giải thích ý nghĩa của tất cả các chữ cái trên để bạn có thể tự xây dựng.

Và tất nhiên đừng quên phát hành các trình định dạng ngày của bạn khi bạn hoàn thành chúng. Đoạn mã trên rò rỉ format, nowinFormat.


Nó bị rò rỉ ngay cả khi kích hoạt ARC?
Dimme

19
Ở trên sẽ không có bất kỳ rò rỉ nào trong ARC (tất nhiên ARC không có sẵn trong năm 2009 khi chúng tôi có cuộc thảo luận này).
Rob Napier

194

đây là những gì tôi đã sử dụng:

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

bạn có thể sử dụng phương pháp này chỉ cần vượt qua ngày của bạn với nó

-(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"];

đặt định dạng để trả về là ....

yyyy-MM-dd trở về 2015-12-17ngày

yyyy-MMM-dd trở về 2015-Dec-17ngày

yy-MM-dd trở về 15-12-17ngày

dd-MM-yy trở về 17-12-15ngày

dd-MM-yyyy trở về 17-12-2015ngày

yyyy-MMM-dd HH:mm:ss trở về 2015-Dec-17 08:07:13ngày

yyyy-MMM-dd HH:mm trở về 2015-Dec-17 08:07ngày

Để biết thêm chi tiết Định dạng dữ liệu và thời gian cho Click Now.

Cảm ơn bạn.....


1
Vui lòng cung cấp mô tả bổ sung cùng với mẫu mã.
Maciej Lach

Tôi có ngày này '2018-06-08T07: 30: 05.391Z' tôi đã thử 'yyyy-MM-dd'T'HH: mm: ss.000Z' nhưng nhận được giá trị không.
Pramod Tapaniya

4

không có gì mới nhưng vẫn muốn chia sẻ phương pháp của tôi:

+(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

Cho nhanh

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

Swift 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)
    }
    
}

Sử dụng

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

Chơi với mẫu để phù hợp với nhu cầu của bạn. Ví dụ và tài liệu ở đây để giúp bạn xây dựng mẫu bạn cần.

Ghi chú

Bạn có thể muốn lưu trữ bộ đệm của bạn DateFormatternếu bạn có kế hoạch sử dụng nó TableViewchẳng hạn. Để đưa ra một ý tưởng, việc lặp lại hơn 1000 ngày đã khiến tôi mất 0,5 giây bằng cách sử dụng toString(template: String)chức năng trên , so với 0,05 giây sử dụng myFormatter.string(from: Date).


Để làm cho ghi chú đó mạnh hơn (vì nó rất quan trọng), bạn có thể cấu trúc lại hàm của mình để lấy tham số tùy chọn với giá trị mặc định của thể hiện mới. Tôi không biết lý do tại sao bạn bị hạ cấp, vì vậy tôi ủng hộ nó.
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];

Đó là nó, bạn đã có tất cả những gì bạn muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.