Formatar uma string para exibir a data corretamente
-
19-09-2019 - |
Pergunta
Eu preciso de ajuda para converter essa string -> 20090727 10:16:36:643
para -> 07/27/2009 10:16:36
A data e hora originais estão sendo retornado pela função SynchronizationAgent.LastUpdated()
, que retorna um String no formato acima.
pergunta original: preservada para referência
Eu tenho esta ->
HUD.LastSyncDate = mergeSubscription.SynchronizationAgent.LastUpdatedTime;
Qual é a criação de uma propriedade que se parece com isso ->
public static string LastSyncDate
{
get { return _lastSyncDate; }
set
{
_lastSyncDate = String.Format(CultureInfo.InvariantCulture,"{0:G}", value);
}
}
Infelizmente, com ou sem a String.Format
a data que é exibido esta aparência -> 20090727 10:16:36:643
Eu tentei várias variações para formatá-lo da maneira que eu quero. O que eu estou ausente?
Com base no abaixo sugestões ( Na maior parte do Joel ), implementei as alterações sugeridas, mas ainda estou recebendo um "String is not a valid DateTime error"
Eu também tentei implementar isso ->
HUD.LastSyncDate = DateTime.ParseExact(mergeSubscription.SynchronizationAgent.LastUpdatedTime,"yyyyMMdd HH:mm:ss:fff",CultureInfo.InvariantCulture);
mas ainda nada.
Solução
Parece-me que LastUpdatedTime é realmente uma string (desde que você pode fazer a atribuição) não um DateTime. Nesse caso, o formato aplicado não vai fazer nada. Você vai querer analisar o LastUpdatedTime em um DateTime em seguida, reformatar para o formato que você deseja antes de atribuí-lo para a cadeia.
DateTime lastUpdated = DateTime.Parse( mergeSubscription.SynchronizationAgent.LastUpdatedTime );
HUD.LastSyncDate = string.Format( "{0:G}", lastUpdated );
public static string LastSyncDate { get; set; }
Note que você pode precisar usar ParseExact vez.
DateTime lastUpdated = DateTime.ParseExact( "yyyyMMdd HH:mm:ss:fff",
...,
CultureInfo.InvariantCulture );
Outras dicas
HUD.LastSyncDate = DateTime.Parse(mergeSubscription.SynchronizationAgent.LastUpdatedTime).ToString("MM/dd/yyyy")
Você pode colocar qualquer cadeia de formato você quer lá. Mas parece que o que você realmente quer é algo mais parecido com isto:
private static DateTime _lastSyncDate;
public static DateTime LastSyncDate
{
get { return _lastSyncDate; }
set { _lastSyncDate = value;}
}
public static string LastSyncDateString
{
get { return LastSyncDate.ToString("MM/dd/yyyy"); }
}
Mantenha-o como um datetime no fundo e só usar a propriedade de cadeia para exibição.
O que você quer fazer? Você começa uma corda, passá-lo para String.Format()
e armazená-lo em um campo string. Você quer reformatar a corda? Neste caso, você tem que analisar a volta string para DateTime
e formatar esse valor novamente.
DateTime dateTime;
if (DateTime.TryParse(value, out dateTime))
{
lastSyncDate = String.Format(CultureInfo.InvariantCulture,"{0:G}", dateTime);
}
else
{
HandleInvalidInput(value);
}