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.

Foi útil?

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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top