Swift: форматирование NSDate с использованием strftime и localtime

Как преобразовать следующий код Objective-C в код Swift?

#define MAX_SIZE 11 char buffer[MAX_SIZE]; time_t time = [[NSDate date] timeIntervalSince1970]; strftime(buffer, MAX_SIZE, "%-l:%M\u2008%p", localtime(&time)); NSString *dateString = [NSString stringWithUTF8String:buffer]; NSLog(@"dateString: %@", dateString); // dateString: 11:56 PM 

Я форматирую date .

Как сказали комментаторы @BryanChen и @JasonCoco, используйте NSDateFormatter.

 let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd 'at' h:mm a" // superset of OP's format let str = dateFormatter.stringFromDate(NSDate()) 

Полное описание строк формата доступно в «Руководстве по форматированию данных» .

Вот еще один пример использования NSDateFormatterStyle :

 private func FormatDate(date:NSDate) -> String { let dateFormatter = NSDateFormatter() dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle return dateFormatter.stringFromDate(date) } 

Результат форматируется как « 1 января 1990 года ».

Если вы хотите больше узнать о форматировании и разных доступных стилях, посмотрите, NSFormatter в разделе NSDateFormatter .

Моя функция я использую.

 extension NSDate { public func toString (format: String) -> String { let formatter = NSDateFormatter () formatter.locale = NSLocale.currentLocale() formatter.dateFormat = format return formatter.stringFromDate(self) } } date.toString("yyyy-MM-dd") 
  let maxSize: UInt = 11 var buffer: CChar[] = CChar[](count: Int(maxSize), repeatedValue: 0) var time: time_t = Int(NSDate().timeIntervalSince1970) var length = strftime(&buffer, maxSize, "%-l:%M\u2008%p", localtime(&time)) var dateString = NSString(bytes: buffer, length: Int(length), encoding: NSUTF8StringEncoding) NSLog("dateString: %@", dateString) // dateString: 11:56 PM