Formater une chaîne à afficher correctement la date
-
19-09-2019 - |
Question
J'ai besoin d'aide pour convertir cette chaîne -> 20090727 10:16:36:643
-> 07/27/2009 10:16:36
La date et l'heure d'origine sont renvoyés par la fonction SynchronizationAgent.LastUpdated()
, qui renvoie une chaîne dans le format ci-dessus.
Question originale: conservée pour référence
Je cette ->
HUD.LastSyncDate = mergeSubscription.SynchronizationAgent.LastUpdatedTime;
Ce qui est de définir une propriété qui ressemble à ceci ->
public static string LastSyncDate
{
get { return _lastSyncDate; }
set
{
_lastSyncDate = String.Format(CultureInfo.InvariantCulture,"{0:G}", value);
}
}
Malheureusement, avec ou sans String.Format
la date qui apparaît ressemble à ceci -> 20090727 10:16:36:643
J'ai essayé plusieurs variantes de ce format comme je le veux. Qu'est-ce que je manque?
D'après les suggestions ci-dessous ( La plupart du temps Joël ), je mis à exécution les changements proposés, mais je reçois toujours un "String is not a valid DateTime error"
J'ai aussi essayé l'application de cette ->
HUD.LastSyncDate = DateTime.ParseExact(mergeSubscription.SynchronizationAgent.LastUpdatedTime,"yyyyMMdd HH:mm:ss:fff",CultureInfo.InvariantCulture);
mais toujours rien.
La solution
Il me semble que LastUpdatedTime est en fait une chaîne (puisque vous pouvez faire la cession) ne DateTime. Dans ce cas, le format appliqué ne fera rien. Vous voulez analyser le LastUpdatedTime dans un DateTime puis reformater dans le format que vous voulez avant de l'assigner à votre chaîne.
DateTime lastUpdated = DateTime.Parse( mergeSubscription.SynchronizationAgent.LastUpdatedTime );
HUD.LastSyncDate = string.Format( "{0:G}", lastUpdated );
public static string LastSyncDate { get; set; }
Notez que vous devrez peut-être utiliser ParseExact à la place.
DateTime lastUpdated = DateTime.ParseExact( "yyyyMMdd HH:mm:ss:fff",
...,
CultureInfo.InvariantCulture );
Autres conseils
HUD.LastSyncDate = DateTime.Parse(mergeSubscription.SynchronizationAgent.LastUpdatedTime).ToString("MM/dd/yyyy")
Vous pouvez mettre tout que vous voulez là. Mais cela ressemble à ce que vous voulez vraiment est quelque chose comme ceci:
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"); }
}
Gardez-le comme datetime en arrière-plan et il suffit d'utiliser la propriété de chaîne pour l'affichage.
Que voulez-vous faire? Vous obtenez une chaîne, passez à String.Format()
et le stocker dans un champ de chaîne. Voulez-vous reformater la chaîne? Dans ce cas, vous devez analyser la chaîne de retour à DateTime
et formater à nouveau cette valeur.
DateTime dateTime;
if (DateTime.TryParse(value, out dateTime))
{
lastSyncDate = String.Format(CultureInfo.InvariantCulture,"{0:G}", dateTime);
}
else
{
HandleInvalidInput(value);
}