NSDate'i hem yıl, ay, gün ve saat, dakika, saniye için belirli stillere biçimlendirme


132

Temel olarak şu anki tarih ve saati şu şekilde biçimlendirilmiş olarak ayrı ayrı almam gerekiyor:

2009-04-26 
11:06:54

Aşağıdaki kod, aynı konudaki başka bir sorudan,

şimdi: | 2009-06-01 23:18:23 +0100 | 
dateString: | 01 Haz 2009 23: 18 | 
ayrıştırılmış: | 2009-06-01 23:18:00 +0100 |

Neredeyse aradığım şey bu, ama günü ve saati ayırmak istiyorum.

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
Sorunu çözmek için kullandığın kodu yazmak için zaman ayırdığın böyle bir durumda, muhtemelen yazını düzenlemek yerine onu (bu durumda edit2'nin altındaki her şeyi) bir cevaba yapıştırırım. Her iki durumda da büyük bir şey değil, ancak sorunun bir çözüm olduğunu bulmayı / görmeyi biraz kolaylaştırıyor.
Lawrence Johnston

Yanıtlar:


72

iPhone biçim dizeleri Unicode biçimindedir . Bağlantının arkasında, yukarıdaki tüm harflerin ne anlama geldiğini açıklayan bir tablo var, böylece kendinizinkini oluşturabilirsiniz.

Ve tabii ki işiniz bittiğinde tarih biçimlendiricilerinizi yayınlamayı unutmayın. Yukarıdaki kod sızıntıları format, nowve inFormat.


ARC etkinken bile sızdırıyor mu?
Dimme

19
Yukarıdakilerin ARC altında herhangi bir sızıntısı olmayacak (elbette bu tartışmayı yaptığımız 2009'da ARC mevcut değildi).
Rob Napier

194

bu benim kullandığım şey:

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

bu yöntemi kullanabilirsin sadece tarihini ona ilet

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

döndürülecek biçimi ayarlayın ...

yyyy-MM-dddönüş 2015-12-17tarihi

yyyy-MMM-dd dönüş 2015-Dec-17tarihi

yy-MM-dddönüş 15-12-17tarihi

dd-MM-yy dönüş 17-12-15tarihi

dd-MM-yyyy dönüş 17-12-2015tarihi

yyyy-MMM-dd HH:mm:ss dönüş 2015-Dec-17 08:07:13tarihi ve saati

yyyy-MMM-dd HH:mm dönüş 2015-Dec-17 08:07tarihi ve saati

Daha Fazla Ayrıntı İçin Veri ve Saat Biçimi için Şimdi Tıklayın.

Teşekkür ederim.....


1
Lütfen kod örneğiyle birlikte ek açıklama sağlayın.
Maciej Lach

Bu tarihe sahibim '2018-06-08T07: 30: 05.391Z' 'yyyy-AA-gg'T'HH: mm: ss.000Z' denedim ama sıfır değeri alıyorum.
Pramod Tapaniya

4

yeni bir şey yok ama yine de yöntemimi paylaşmak istiyorum:

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

Hızlı için

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

Hızlı 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)
    }
    
}

kullanım

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

İhtiyaçlarınıza uygun şablonla oynayın. İhtiyacınız olan şablonu oluşturmanıza yardımcı olacak örnekler ve dokümanlar burada .

Not

Örneğin DateFormatter, kullanmayı planlıyorsanız , önbelleğe almak isteyebilirsiniz TableView. 1000'den fazla tarih döngü bir fikir vermek için, götürdü 0.5 sn yukarıda kullanılarak toString(template: String)kıyasla fonksiyon 0.05 sn kullanılarak myFormatter.string(from: Date).


Bu notu daha güçlü hale getirmek için (çünkü çok önemlidir), işlevinizi yeni örneğin varsayılan değerine sahip isteğe bağlı bir parametre alacak şekilde yeniden düzenleyebilirsiniz. Neden olumsuz oy aldığını bilmiyorum, bu yüzden onu yükseltiyorum.
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];

İşte bu, istediğin her şeye sahipsin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.