2016-12-28 5 views
0

мне нужно преобразовать простую строку DateFormatter строки, так что я могу передать его параметру NSDateFormatter.dateFromString. У меня есть строкаSwift: преобразовать нормальную строку в строку YYYY-MM-DD?

let a = "20160114" 

Я хочу, чтобы преобразовать его в "2016-01-14" Как?

+0

мой ответ оборотный штраф –

+0

@Json Bourbne, вы должны разместить свой 'тайм-zone'. – aircraft

ответ

4

только для преобразования строки в заданном формате вы можете использовать вставить sunction из SWIF т

var a = "20160114" 

a.insert("-", atIndex: a.startIndex.advancedBy(4)) 
a.insert("-", atIndex: a.startIndex.advancedBy(4+1+2)) 

print(a) 

печати: "2016-01-14" проверка

+2

jason Bourbne: используя этот способ, возможно, в случае, если число цифр изменится, ваша дата может быть нулевой или неправильной, так как ваша проблема заключается в том, что точное решение разделяет @Himanshu Moradiya. – Kalyani

2
let dateformattor = NSDateFormatter() 
dateformattor.dateFormat = "yyyyMMdd" 
dateformattor.timeZone = NSTimeZone.localTimeZone() 
// here just pass your string that you want to convert into date. 
let dt = "20160114" 
let dt1 = dateformattor.dateFromString(dt as String) 
dateformattor.dateFormat = "yyyy-MM-dd" 
dateformattor.timeZone = NSTimeZone.localTimeZone() 
print("Time :",dateformattor.stringFromDate(dt1!)) 

Выход:

Time : 2016-01-14 
+0

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

+0

@Rob ok brother спасибо, что дали мне эта информация. :) –

+2

Да, это лучше. Честно говоря, я бы не стал устанавливать часовой пояс вообще (и я, конечно, не сделал бы этого дважды, lol), но это отлично работает. Спасибо за быструю коррекцию! – Rob

0

это не может быть применима в целом при работе с датами и временем, но если вам нужно только вставить дефис (формат гарантированно будет то же самое), это намного простое решение

var str = "20160112" 
str.characters.insert("-", at: str.index(str.startIndex, offsetBy: 6)) 
str.characters.insert("-", at: str.index(str.startIndex, offsetBy: 4)) 
print(str) // outputs "2016-01-12" 
+0

В чем разница между вызовом 'insert' в виде символа строки, а также вызовом непосредственно в строке? – Alexander

+0

, если честно, я не знаю. Я подозреваю, что это то же самое, и str.insert просто вызывает self.characters.insert с теми же параметрами, но это действительно просто предположение. Должно быть безопасно опускать символы с целью повышения удобочитаемости. – Lope

0
var str = "20160518" 
    let strCpoy = str 
    str.insert("-", at: strCpoy.index(strCpoy.startIndex, offsetBy: 4)) 
    str.insert("-", at: strCpoy.index(strCpoy.startIndex, offsetBy: 7)) 
    print(str) 
3
let dateString = "20160114" 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyyMMdd" 

    let dateObj = dateFormatter.dateFromString(dateString) 

    dateFormatter.dateFormat = "yyyy-MM-dd" 
    print("Dateobj: \(dateFormatter.stringFromDate(dateObj!))") 
Смежные вопросы