Eu sou novo na DotNet e C#. Quero converter uma string em formato mm/dd/yyyy' para objeto
DateTime'. Eu tentei a função parse como abaixo, mas está com um erro de tempo de execução.
DateTime dt=DateTime.Parse("24/01/2013");
Alguma ideia sobre como posso convertê-lo para a data?
Você precisa utilizar `DateTime.ParseExact' com o formato "dd/MM/yyyyy"
DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);
É mais seguro se você utilizar `d/M/yyyy' para o formato, uma vez que isso irá lidar com dígitos simples e duplos dia/mês. Mas isso realmente depende se você estiver esperando valores de um/dos dois dígitos.
O seu formato de data dia/Mês/Ano
pode ser um formato de data aceitável para algumas culturas. Por exemplo para a cultura canadense en-CA
DateTime.Parse
funcionaria como:
DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));
Ou
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread's culture
Ambas as linhas acima funcionariam porque o formato da string's é aceitável para a cultura en-CA
. Como você não está fornecendo nenhuma cultura para a sua chamada `DateTime.Parse', sua cultura atual é utilizada para análise que não't suporta o formato de data. Leia mais sobre isso em DateTime.Parse.
Outro método para análise é utilizar DateTime.TryParseExact
DateTime dt;
if (DateTime.TryParseExact("24/01/2013",
"d/M/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt))
{
//valid date
}
else
{
//invalid date
}
O grupo de métodos TryParse' em .Net framework não'não lança exceção em valores inválidos, em vez disso eles retornam um valor
bool` indicando sucesso ou fracasso na análise.
**Notificação*** de que utilizei single d
e M
para dia e mês, respectivamente. O single d
e M
funciona tanto para dia como para mês, com um ou dois dígitos. Então para o formato d/M/yyyy
os valores válidos poderiam ser:
Para mais leituras, você deve ver: Strings personalizadas de formato de data e hora.
utilizar `DateTime.ParseExact'.
string strDate = "24/01/2013";
DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", null)
"nulo" utilizará a cultura atual, que é um pouco perigosa. Tente fornecer uma cultura específica
DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", CultureInfo.InvariantCulture)
Você pode utilizar "dd/MM/yyyyy"
formato para utilizá-lo em `DateTime.ParseExact'.
Converte a representação em cadeia especificada de uma data e hora para a sua DataTempo equivalente usando o formato especificado e cultura específica informação de formato. O formato da representação da string deve corresponder o formato especificado exactamente.
DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);
Aqui está um DEMO
.
Para mais informações, confira Cordenações de Formato de Data e Hora Personalizadas