2015-06-25 4 views
0

Я получаю строку в этом формате с сервераПреобразование строки даты в «гггг/мм/дд чч: мм: сс» формат в Android & Swift

2015-06-18T05:05:00.880483Z 

Мне нужно преобразовать это yyyy/mm/dd hh:mm:ss формат, который должен быть строкой. Как я могу достичь этого в Android, а также Swift-iOS. Помогите, если вы знаете, как это сделать на одной платформе. Заранее спасибо.

+0

На Android эта строка является результатом GetTime? – Santiago

+0

nope. Я получаю эту строку с сервера в поле JSON. –

ответ

0
NSString *strigDate="json date" 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
NSDate *date = [dateFormatter dateFromString:strigDate]; 



dateFormatter=[[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy/mm/dd hh:mm:ss"]; 
NSString *stringNewDate=[dateFormatter stringFromDate:date]; 
+0

Вы можете перевести Swift. Извините, что я новичок. –

+0

этот код будет работать очень быстро и быстро. –

+0

oops, я не думаю, поэтому я получаю много ошибок. Я думаю, вы, возможно, захотите посмотреть на синтаксис. –

0

В Swift, с верхней части моей головы:

func convertDateFormat(original: String) -> String { 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:SSSSSSZZZZZ" 
    dateFormatter.locale = NSLocale(localeIdentifier; "en_us_POSIX") 
    let date = dateFormatter.dateFromString(yourString) 

    dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss" 
    return dateFormatter.stringFromDate(date) 
} 

Альтернатива, которая просто использует любой формат, пользователь, как правило, отображать даты в, предположим, что вы используете окончательную строку для отображения и не для ввода машины будет вырезать две последние строки и вместо этого сделать:

let outputFormatter = NSDateFormatter() 
outputFormatter.dateStyle = NSDateFormatterStyle.ShortStyle; 
outputFormatter.timeStyle = NSDateFormatterStyle.ShortStyle; 
return outputFormatter.stringFromDate(date); 

это будет двенадцать или двадцать четыре часа, он будет делать дни и месяцы естественный путь вокруг этого пользователя, его напечатать в Арабский или будет подчиняться китайскому календарю, а не по-григориански и т. Д.

NSDateFormatter оставляет за собой право вносить некоторые корректировки в строку формата в соответствии с настройками отображения пользователей, если вы явно не установили локаль как en_us_POSIX. Также обратите внимание, что вы указываете время по Гринвичу, и устройство пользователя не обязательно будет установлено в GMT. Таким образом, строка вывода может отображать локальное время, как это было, когда это было именно время GMT. Если ваш сервер некорректен относительно этого окончательного z, то переопределите его, установив timezone в GMT на ваш выходной форматтер.

+0

вы что-то вроде этого func changeDateTimeToString (дата: NSDate!) -> String { var dateFormatter: NSDateFormatter = NSDateFormatter(); dateFormatter.dateFormat = "yyyy-MM-dd HH: mm: ss"; dateFormatter.locale = NSLocale (localeIdentifier: "en_us_POSIX") var dt: String = dateFormatter.stringFromDate (date); return dt; } –

+0

Это вернет объект NSDate; вам нужно преобразовать его в другую строку, используя 'stringFromDate'' NSDateFormatter'. iOS имеет эту вещь под названием «NSDate» с немного запутанным именем: они «представляют собой единый момент времени». Так что именно то, что отпечатывается, зависит от вашего часового пояса, локали и т. Д. 'NSDateFormatter' делает совпадения между строками и датами, подчиненными часовому поясу, языку и календарю, все из которых вы можете оставить неявным, а потому разные вещи существуют и как они соотносятся. – Tommy

+0

Кроме того, по сравнению с другими ответами gven; опустите язык, только если вы хотите сбой в некоторых регионах.Используйте спецификатор 'ZZZZZ' вместо того, чтобы проглотить источник' Z' как символ фиксированного формата, чтобы форматор даты распознавал зону, в которую входил исходная строка, без жесткого кодирования. – Tommy

1

Об использовании Android этот код:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'"); 
String dateString = "2015-06-18T05:05:00.880483Z"; 


try { 
Date date = df.parse(dateString); 
df.applyPattern("yyyy/mm/dd hh:mm:ss"); 
String result = df.format(date); 

} catch (ParseException e) { 
         e.printStackTrace(); 
        } 
0
let strigDate="json date" 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 
let date=dateFormatter.dateFromString(strigDate) 

dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy/mm/dd hh:mm:ss" 
let stringNewDate=dateFormatter.stringFromDate(date) 
+0

Спасибо. Теперь я получил дату в этом формате. Это не соответствует моей текущей дате и времени. Я в Сингапуре. –

+0

@KalaiArasi ваша дата имеет Z в конце. Это означает, что время UTC. Вы не можете расценивать Z –

+0

Хорошо, как мне получить местное время? Есть ли способ конвертировать UTC в мой местный часовой пояс? –

1
let stringDate = "2015-06-18T05:05:00.880483Z" 

let df = NSDateFormatter() 
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ" 
if let date = df.dateFromString(stringDate) { 
    df.dateFormat = "yyyy/MM/dd HH:mm:ss" 
    let finalString = df.stringFromDate(date) 
    println(finalString) 
} 
+0

Мне нужен вывод в виде строкового формата –

+0

@KalaiArasi см. Мое редактирование –

+0

У меня есть выход вроде этого. Существует проблема с полевым полем месяца = 2015-06-25T02: 31: 56.997291Z output = 2015/31/25 10:31:56 –

0
var dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 
    let date = dateFormatter.dateFromString(str) 

    dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy/MM/dd hh:mm:ss" 
    let dateStr = dateFormatter.stringFromDate(date!) 
    print("Date string is:::::\(dateStr)") 
Смежные вопросы