Como um recurso complementar para todas as respostas abaixo, eu recomendo verificar nsdateformatter.com
user3344977
As respostas antigas aqui são realmente ERRADAS . O documento da Apple diz claramente que você precisa armazenar em cache o formatador. stackoverflow.com/a/42370648/294884
let dateFormatter =NSDateFormatter()
dateFormatter.dateFormat =/* find out and place date format from
* http://userguide.icu-project.org/formatparse/datetime
*/let date = dateFormatter.dateFromString(/* your_date_string */)
Para consultas adicionais, verifique as classes NSDateFormatter e DateFormatter da estrutura Foundation para Objective-C e Swift, respectivamente.
Swift 3 e posterior (Swift 4 incluído)
let dateFormatter =DateFormatter()
dateFormatter.dateFormat =/* date_format_you_want_in_string from
* http://userguide.icu-project.org/formatparse/datetime
*/guardlet date = dateFormatter.date(from:/* your_date_string */)else{
fatalError("ERROR: Date conversion failed due to mismatched format.")}// use date constant here
Encontrou a solução só precisa definir "hh AAAA-MM-DD: MM: ss.SSSSxxx" Este formato de data
Shardul
1
Eu tenho uma string de data como esta "2014-07-15 06: 55: 14-0400" e tentei usar yyyy-MM-dd hh:mm:ssZZZ. Mas não consigo tirar o objeto de data da string.
Iamprem 06/04
2
@Prem, se você ver que a saída está "2014-07-15 10:55:14 +0000"correta. A partir da NSDatedescrição, a saída da data seria calculada com diferença (aqui, GMT -4 horas). Se você quiser obter a diferença entre GMT e UTC, -0400verifique esta referência
x4h1d 07/04
@ x4h1d, ei, entendi! Eu cometi um erro em hhque deveria estar HH. Obrigado!
Iamprem 07/04
3
@ lmiguelvargasf, acho que seria yyyy-MM-dd'T'HH:mm:ss.SSS'Z'. Eu assumi que Zé apenas um personagem aqui. Lembre-se, também Ztem um significado especial. Se você deseja Zespecificar como basic hmso formato seria yyyy-MM-dd'T'HH:mm:ss.SSSZ.
X4h1d 02/10/2015
71
Swift 4
importFoundationlet dateString ="2014-07-15"// change to your date format
var dateFormatter =DateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd"let date = dateFormatter.date(from: dateString)
println(date)
Swift 3
importFoundationvar dateString ="2014-07-15"// change to your date format
var dateFormatter =NSDateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd"var date = dateFormatter.dateFromString(dateString)
println(date)
O código não está certo. Ele gera alguns "15 de janeiro de 2014, 00:00"
Jake Lin
5
usar em ddvez de DDdeve ajudar a corrigir o problema "sempre em janeiro".
Pascal Belloncle
1
A versão correta é, yyyy-MM-ddcaso contrário, a data da análise será bloqueada em janeiro - atualizei a resposta para refletir a alteração.
Zorayr
E se eu quiser passar a data atual como string. Isso vai funcionar?
Arjun Kalidas #
@Zorayr, Kittisak: Estou obtendo o resultado final, Opcional (2014-07-14 18:30:00 +0000), significa que um dia é diminuído. Como posso consertar isso ?
Vineesh TP
54
func convertDateFormatter(date:String)->String{let dateFormatter =NSDateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
dateFormatter.timeZone =NSTimeZone(name:"UTC")let date = dateFormatter.dateFromString(date)
dateFormatter.dateFormat ="yyyy MMM EEEE HH:mm"///this is what you want to convert format
dateFormatter.timeZone =NSTimeZone(name:"UTC")let timeStamp = dateFormatter.stringFromDate(date!)return timeStamp
}
Atualizado para o Swift 3.
func convertDateFormatter(date:String)->String{let dateFormatter =DateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
dateFormatter.timeZone =NSTimeZone(name:"UTC")asTimeZone!let date = dateFormatter.date(from: date)
dateFormatter.dateFormat ="yyyy MMM EEEE HH:mm"///this is what you want to convert format
dateFormatter.timeZone =NSTimeZone(name:"UTC")asTimeZone!let timeStamp = dateFormatter.string(from: date!)return timeStamp
}
Se você precisar analisar a sequência em uma data frequentemente, convém mover a funcionalidade para uma extensão. Criei um arquivo sharedCode.swift e coloquei minhas extensões lá:
extensionString{func toDateTime()->NSDate{//Create Date Formatter
let dateFormatter =NSDateFormatter()//Specify Format of String to Parse
dateFormatter.dateFormat ="yyyy-MM-dd hh:mm:ss.SSSSxxx"//Parse into NSDate
let dateFromString :NSDate= dateFormatter.dateFromString(self)!//Return Parsed Date
return dateFromString
}}
Então, se você deseja converter sua string em um NSDate, basta escrever algo como:
Obrigado. Também é possível, embora menos útil, escrever: var myDate = "04-05-2015" .toDateTime () Achei isso útil ao configurar dados de teste.
Stephen Watson
1
Tenho certeza de que o hhdeve ser HHneste caso.
25416 Alex
Isso não me fornece o formato especificado: var date = NSDate (); deixe dateFormatter = NSDateFormatter (); dateFormatter.dateFormat = "MMMM d, AAAA"; deixe myDate = dateFormatter.stringFromDate (date); Além disso, se eu usar sua extensão assim -> var myDate2 = myDate.toDateTime (); Está me dando uma data totalmente diferente e não a data atual.
Não há necessidade de deixá-los no escopo global. Você pode estender o Formatador apenas declarando suas propriedades estáticas. verifique este stackoverflow.com/a/43658213/2303865
Leo Dabus
4
Extensões de apoio Swift, com extensão você pode adicionar uma nova funcionalidade a um já existente class, structure, enumeration, ou protocoltipo.
Você pode adicionar uma nova initfunção ao NSDateobjeto extendendo o objeto usando a extensionpalavra - chave.
Eu gosto do jeito init. Não existe outra maneira de criar a data sem usar timeInterval? e se o nsdate parar de ter um inicializador com um parâmetro de data? como você resolveria isso? Pessoalmente eu prefiro uma forma de inicialização, mas eu não sei como superar este problema
Mijail
Eu tenho um problema: minha data como string é assim: "2017-03-10 22:16:00 +0000" e usei este formato: "aaaa-MM-dd hh: mm: ss Z" e este: "aaaa-MM-dd'T'HH: mm: ss". Mas para ambos, quando faço isso: deixe beginDate = df.date(from: beginDateString), recebo um valor nulo! porque? ( df = DateFormatter())
Paul Bénéteau
4
Desde o Swift 3, muitos dos prefixos NS foram eliminados.
let dateFormatter =DateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd'T'HH:mm:ss.SSSZ"/* date format string rules
* http://userguide.icu-project.org/formatparse/datetime
*/let date = dateFormatter.date(from: dateString)
Eu tenho um problema: minha data como string é assim: "2017-03-10 22:16:00 +0000" e usei este formato: "aaaa-MM-dd hh: mm: ss Z" e este: "aaaa-MM-dd'T'HH: mm: ss". Mas para ambos, quando faço isso: deixe beginDate = df.date(from: beginDateString), recebo um valor nulo! porque? ( df = DateFormatter())
Paul Bénéteau
4
Swift 3,4:
2 conversões úteis:
string(from:Date)// to convert from Date to a String
date(from:String)// to convert from String to Date
Uso: 1.
let date =Date()//gives today's date
let dateFormatter =DateFormatter()
dateFormatter.dateFormat ="dd.MM.yyyy"let todaysDateInUKFormat = dateFormatter.string(from: date)
2)
let someDateInString ="23.06.2017"var getDateFromString = dateFormatter.date(from: someDateInString)
Swift:iOSif we have string, convert it to NSDate,var dataString = profileValue["dob"]asStringvar dateFormatter =NSDateFormatter()
dateFormatter.dateFormat ="MM-dd-yyyy"// convert string into date
let dateValue:NSDate?= dateFormatter.dateFromString(dataString)if you have and date picker parse date like this
// to avoid any nil value
iflet isDate = dateValue {self.datePicker.date = isDate
}
let dateFormatter =DateFormatter()
dateFormatter.dateFormat ="dd/MM/yyyy"//same as strDate date formator
dateFormatter.timeZone =TimeZone(abbreviation:"GMT+0:00")//Must used if you get one day less in conversion
let convertedDateObject = dateFormatter.date(from: strDate)
importFoundationlet now :String="2014-07-16 03:03:34 PDT"var date :NSDatevar dateFormatter :NSDateFormatter
date = dateFormatter.dateFromString(now)
date // $R6:__NSDate =2014-07-1603:03:34 PDT
Respostas:
tente isto:
Para consultas adicionais, verifique as classes NSDateFormatter e DateFormatter da estrutura Foundation para Objective-C e Swift, respectivamente.
Swift 3 e posterior (Swift 4 incluído)
fonte
yyyy-MM-dd hh:mm:ssZZZ
. Mas não consigo tirar o objeto de data da string."2014-07-15 10:55:14 +0000"
correta. A partir daNSDate
descrição, a saída da data seria calculada com diferença (aqui, GMT -4 horas). Se você quiser obter a diferença entre GMT e UTC,-0400
verifique esta referênciahh
que deveria estarHH
. Obrigado!yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
. Eu assumi queZ
é apenas um personagem aqui. Lembre-se, tambémZ
tem um significado especial. Se você desejaZ
especificar comobasic hms
o formato seriayyyy-MM-dd'T'HH:mm:ss.SSSZ
.Swift 4
Swift 3
Eu posso fazer isso com este código.
fonte
dd
vez deDD
deve ajudar a corrigir o problema "sempre em janeiro".yyyy-MM-dd
caso contrário, a data da análise será bloqueada em janeiro - atualizei a resposta para refletir a alteração.Atualizado para o Swift 3.
fonte
Detalhes
Solução
Uso
Resultado
Mais Informações
Sobre o formato da data
fonte
Se você precisar analisar a sequência em uma data frequentemente, convém mover a funcionalidade para uma extensão. Criei um arquivo sharedCode.swift e coloquei minhas extensões lá:
Então, se você deseja converter sua string em um NSDate, basta escrever algo como:
fonte
hh
deve serHH
neste caso.Para Swift 3
fonte
Os fragmentos de código nesta página do controle de qualidade estão "de cabeça para baixo" ...
A primeira coisa que a Apple menciona é que você armazena em cache o formatador ...
Link para o documento da Apple, indicando exatamente como fazer isso:
Use um ...
Em seguida, basta usar esse formatador em qualquer lugar ...
ou
Ou use qualquer um dos outros métodos convenientes no DateFormatter.
É simples assim.
(Se você escrever uma extensão em String, seu código estará completamente "invertido" - você não poderá usar nenhuma chamada dateFormatter!)
Observe que geralmente você terá alguns desses globais .. como "formatForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" ... etc.
fonte
Extensões de apoio Swift, com extensão você pode adicionar uma nova funcionalidade a um já existente
class
,structure
,enumeration
, ouprotocol
tipo.Você pode adicionar uma nova
init
função aoNSDate
objeto extendendo o objeto usando aextension
palavra - chave.Agora você pode iniciar um objeto NSDate usando:
fonte
df.date(from: beginDateString)
, recebo um valor nulo! porque? (df = DateFormatter()
)Desde o Swift 3, muitos dos prefixos NS foram eliminados.
fonte
df.date(from: beginDateString)
, recebo um valor nulo! porque? (df = DateFormatter()
)Swift 3,4:
2 conversões úteis:
Uso: 1.
2)
fonte
PARA SWIFT 3.1
NOTA: ISTO RETORNARÁ A CORDA ORIGINAL SE ERRO
fonte
Para adicionar String no formato de data no Swift, fiz isso
fonte
Este trabalho para mim ..
fonte
Abaixo estão algumas opções de conversão de formato de string para data que podem ser usadas no iOS rápido.
Thursday, Dec 27, 2018
format =EEEE, MMM d, yyyy
12/27/2018
format =MM/dd/yyyy
12-27-2018 09:59
format =MM-dd-yyyy HH:mm
Dec 27, 9:59 AM
format =MMM d, h:mm a
December 2018
format =MMMM yyyy
Dec 27, 2018
format =MMM d, yyyy
Thu, 27 Dec 2018 09:59:19 +0000
format =E, d MMM yyyy HH:mm:ss Z
2018-12-27T09:59:19+0000
format =yyyy-MM-dd'T'HH:mm:ssZ
27.12.18
format =dd.MM.yy
09:59:19.815
format =HH:mm:ss.SSS
fonte
fonte
Você pode tentar este código rápido
fonte
SWIFT 5 , Xcode 11.0
Passe sua (data na sequência) em "dateString" e no formato de passagem "dateFormat" desejado. Para escolher o formato, use o site NDateFormatter .
fonte
https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/index.html#//apple_ref/doc/uid/20000447-SW32
fonte