Перетворити NSDate в NSString


Відповіді:


468

Як щодо...

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy"];

//Optionally for time zone conversions
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];

//unless ARC is active
[formatter release];

Швидкий 4.2:

func stringFromDate(_ date: Date) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd MMM yyyy HH:mm" //yyyy
    return formatter.string(from: date)
}

24
Це призведе до витоку пам'яті, оскільки форматер ніколи не випускається.
мана

6
Не використовуйте initз NSDateFormatter. Його було видалено після iOS 3.2 . (І якщо ви замість цього використовуєте метод класу, він автоматично випускається, і у вас теж не буде проблеми з протіканням.)
zekel

3
Дуже пропоную подивитися нижче на localizedStringFromDate
Одін Бен Дов

4
@zekel Я не впевнений, що раніше писала документація, але зараз вона пропонує initв багатьох місцях.
Ніл Ехардт

2
Я б його опублікував (3 роки тому)
Адам Уайт

283

Я не знаю, як ми всі пропустили це : localizedStringFromDate: dateStyle: timeStyle:

NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date] 
                                                      dateStyle:NSDateFormatterShortStyle 
                                                      timeStyle:NSDateFormatterFullStyle];
NSLog(@"%@",dateString);

виходи '13 / 06/12 00:22:39 GMT + 03: 00 '


раз виписаний на рядок, чи є приємний акуратний спосіб прочитати його так? (використовуючи ті перерахунки NSDateFormatter)
Fonix

@Fonix Я не думаю, що це - локалізована рядок, це означає, що це залежить від налаштувань мови локалізації користувача. Ніколи не слід зберігати дати у такому форматі, оскільки налаштування можуть змінюватися будь-коли.
Віктор Беней

Приємно, якщо ви використовуєте форматер рідко. Інакше вам потрібен кеш.
Майк Глухов

Швидко: нехай dateString = NSDateFormatter.localizedStringFromDate (дата, датаStyle: .ShortStyle, timeStyle: .FullStyle);
Крістан

1
Зменшила кількість кодів і завдяки її ідеальній роботі
Preetha

87

Сподіваємося додати більше цінності, надаючи нормальний формат, включаючи рік, місяць і день із часом. Ви можете використовувати цей форматер більше ніж рік

[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"]; 

24

в Інтернеті є ряд NSDateпомічників, які я, як правило, використовую:

https://github.com/billymeltdown/nsdate-helper/

Екстракт Readme нижче:

  NSString *displayString = [NSDate stringForDisplayFromDate:date];

Це дає такі види виробництва:

3:42 AM  if the date is after midnight today
Tuesday  if the date is within the last seven days
Mar 1  if the date is within the current calendar year
Mar 1, 2008  else ;-)

Це, безумовно, чудове рішення. Не потрібно витрачати час на занепокоєння про те, як ви хочете виглядати ваші побачення, і можете продовжувати кодування. :)
kyleturner

13

У Свіфті:

var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy"
var dateString = formatter.stringFromDate(YourNSDateInstanceHERE)

У Swift 3.0 дозвольте formatter = DateFormatter () formatter.dateFormat = "yyyy" повернути formatter.string (від: дата)
Віктор Лаерте

8
  NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
  [dateformate setDateFormat:@"yyyy"]; // Date formater
  NSString *date = [dateformate stringFromDate:[NSDate date]]; // Convert date to string
  NSLog(@"date :%@",date);

1
"РРРР" дає рік за поточний тиждень, а не за день. Використовуйте замість "yyyy". Дивіться це питання ТА для отримання додаткової інформації. stackoverflow.com/questions/15133549/…
Стів Мозер

Дякую Стіве мозер :)
SR Nayak

4

Якщо у вас немає NSDate -descriptionWithCalendarFormat:timeZone:locale:доступних даних (я не вірю, що iPhone / Cocoa Touch включає це), можливо, вам доведеться використовувати стропінг і мавпочку навколо з деякими рядками в стилі С. Ви можете отримати часову позначку UNIX від NSDateвикористання NSDate -timeIntervalSince1970.


4
+(NSString*)date2str:(NSDate*)myNSDateInstance onlyDate:(BOOL)onlyDate{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    if (onlyDate) {
        [formatter setDateFormat:@"yyyy-MM-dd"];
    }else{
        [formatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    }

    //Optionally for time zone conversions
    //   [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

    NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];
    return stringFromDate;
}

+(NSDate*)str2date:(NSString*)dateStr{
    if ([dateStr isKindOfClass:[NSDate class]]) {
        return (NSDate*)dateStr;
    }

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];
    NSDate *date = [dateFormat dateFromString:dateStr];
    return date;
}

3

Просто додайте це розширення:

extension NSDate {
    var stringValue: String {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "yourDateFormat"
        return formatter.stringFromDate(self)
    }
}

2

Якщо ви перебуваєте на Mac OS X, ви можете написати:

NSString* s = [[NSDate date] descriptionWithCalendarFormat:@"%Y_%m_%d_%H_%M_%S" timeZone:nil locale:nil];

Однак це недоступно на iOS.


1

стрімкий 4 відповідь

static let dateformat: String = "yyyy-MM-dd'T'HH:mm:ss"
public static func stringTodate(strDate : String) -> Date
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateformat
    let date = dateFormatter.date(from: strDate)
    return date!
}
public static func dateToString(inputdate : Date) -> String
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateformat
    return formatter.string(from: inputdate)

}

0
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:myNSDateInstance];
NSInteger year = [components year];
// NSInteger month = [components month];
NSString *yearStr = [NSString stringWithFormat:@"%ld", year];

0

Визначте власну утиліту для форматування необхідного формату дати, наприклад, наприклад.

NSString * stringFromDate(NSDate *date)  
 {   NSDateFormatter *formatter
    [[NSDateFormatter alloc] init];  
    [formatter setDateFormat:@"MM ∕ dd ∕ yyyy, hh꞉mm a"];    
    return [formatter stringFromDate:date]; 
}

0

Це швидкий формат:

func dateFormatterWithCalendar(calndarIdentifier: Calendar.Identifier, dateFormat: String) -> DateFormatter {

    let formatter = DateFormatter()
    formatter.calendar = Calendar(identifier: calndarIdentifier)
    formatter.dateFormat = dateFormat

    return formatter
}


//Usage
let date = Date()
let fotmatter = dateFormatterWithCalendar(calndarIdentifier: .gregorian, dateFormat: "yyyy")
let dateString = fotmatter.string(from: date)
print(dateString) //2018
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.