2015-06-19 4 views
2

EDIT: Пожалуйста, внимательно прочитайте мне нужно поддерживать этот конкретный формат, я не могу просто пойти и использовать жёстко прописанный формат с использованием NSDateFormatterКак форматировать строку в Swift, используя STRFTIME

Привет У меня есть задача форматирования все даты в нашем приложении с использованием настроек, полученных из OUR API, формат в этом случае поддерживается функциями strftime.

Как следует использовать и быстро использовать их.

Пример формата даты и времени: "date_format": "% d% B% Y" "time_format": "% H:% M"

Я нашел функцию strtime но я не конечно, как я должен использовать это или даже если я должен. Я также только нашел примеры в Objective-C

+2

Почему бы просто не использовать 'NSDateFormatter'? Он задокументирован в «Руководстве по программированию даты и времени» от Apple, и вы найдете много вопросов и ответов о NSDateFormatter здесь на SO (даже для Swift :) –

+0

Из-за вопроса, в котором конкретно просят что-то соблюдать в формате NSDateFormatter поддержка? –

+1

Что именно вы не можете сделать с NSDateFormatter? «% d» - «dd», «% B» - «MMMM», «% Y» - «yyyy» и т. д. ... - Или вы имели в виду, что формат 'strftime()' извлекается через API? –

ответ

2

Я надеюсь, что вы можете найти лучший способ, чтобы удовлетворить эту требование, но вот код.

let bufferSize = 255 
var buffer = [Int8](count: bufferSize, repeatedValue: 0) 
var timeValue = time(nil) 
let tmValue = localtime(&timeValue) 

strftime(&buffer, UInt(bufferSize), "%d %B %Y", tmValue) 
let dateFormat = String(CString: buffer, encoding: NSUTF8StringEncoding)! 

strftime(&buffer, UInt(bufferSize), "%H:%M", tmValue) 
let timeFormat = String(CString: buffer, encoding: NSUTF8StringEncoding)! 

ПРИМЕЧАНИЕ: Я обновил код только немного для ясности.

+0

Я предпочел бы использовать локальный формат, поскольку он имеет больше смысла, но иногда требования - это требования. Спасибо, что поделились этим. –

+0

Я действительно получаю: «Не могу вызвать strftime с списком аргументов типа (inout [(int8], UInt, String UnsafeMutablePointer ошибок в этих строковых строках. –

+1

Это не компилируется в Swift 1.2:' UInt (bufferSize) 'should просто «bufferSize». - Преобразование из буфера символов в строку Swift можно упростить до 'let dateFormat = String.fromCString (buffer)!'. –

1

вы можете использовать что-то вроде этого:

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd 'at' h:mm a" 
let str = dateFormatter.stringFromDate(NSDate()) 

и для более детальной информации - https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/

+0

Исправьте меня, если я ошибаюсь, я не смогу далеко продвинуться, используя специальный формат, основанный на strftime, с этим? Я специально прошу об этом, я знаю NSDateFormatter и использую его. –

+0

oops .. ранее эта вещь не упоминается в вопросе –

+0

Редактирование не было, формат был, я просто добавил жирный текст, потому что люди склонны не читать эти вещи. –