2010-06-04 3 views
3

Je dois analyser la valeur de la date réelle à partir d'un fichier de configuration. Donc j'ai besoin de savoir s'il y a une représentation sous forme de chaîne de DateTime.Now()? Donc je peux l'analyser via DateTime.Parse(..)?C# - Existe-t-il une représentation sous forme de chaîne de DateTime.Now()?

Merci

EDIT

Désolé, je n'ai pas expliqué moi-même assez bien. Je réexplique ma question. J'ai mon fichier de configuration qui a la section suivante:

<Parameters> 
    <Parameter Name="StartTime" Value="**I Want to put a string here that will be parsed as DateTime.Now()**"/> 
</Parameters> 

attention à ce qui est spécifié dans l'attribut de valeur!

+0

Les dates sont formatées en fonction des paramètres régionaux. Peux-tu être plus précis? –

+2

S'il vous plaît élaborer sur ce que vous essayez de faire. Vous pouvez bien sûr obtenir une représentation de chaîne en utilisant 'DateTime.Now.ToString()', mais quelque chose me dit que ce n'est pas ce que vous demandez. – Jens

+1

Si je comprends bien, vous voulez une chaîne qui analysera toujours dans la date actuelle au moment de l'analyse? –

Répondre

6

Je ne pense pas que vous pouvez obtenir ce que vous voulez en analysant simplement un datetime. Je pense que ce que vous essayez de faire, est d'avoir une valeur qui représente DateTime.Now, aucune n'existe, car DateTime.Now est en constante évolution. Ce que vous pouvez faire est de permettre une chaîne spéciale que vous souhaitez représenter la valeur actuelle:

public DateTime GetDateTime(string value) 
{ 
    if (string.IsNullOrEmpty(value)) 
    return DateTime.MinValue; 

    if ("{now}".Equals(value, StringComparison.InvariantCultureIgnoreCase)) 
    return DateTime.Now; 

    return DateTime.Parse(value); 
} 
3

DateTime.Parse analysera un certain nombre de formats:

  • Une chaîne avec une date et une composante temporelle.
  • Chaîne avec une date mais pas de composant temporel.
  • Une chaîne avec un composant date mais pas de date.
  • Chaîne contenant des informations de fuseau horaire et conforme à la norme ISO 8601. Par exemple, la première des deux chaînes suivantes désigne le temps universel coordonné (UTC); le second désigne le temps dans un fuseau horaire de sept heures plus tôt que UTC:
  • 2008-11-01T19: 35: 00.0000000Z
  • 2008-11-01T19: 35: 00,0000000 à 07: 00
  • Chaîne inclut le désignateur GMT et est conforme au format horaire RFC 1123. Par exemple:
    1. Sam 1 novembre 2008 19:35:00 GMT
  • Une chaîne qui comprend la date et l'heure ainsi que le fuseau horaire des informations de décalage. Par exemple:
    1. 03/01/2009 05:42:00 -5: 00

Si vous souhaitez contrôler davantage sur l'analyse que vous pouvez utiliser DateTime.ParseExact.

En ce qui concerne votre modification, utilisez simplement DateTime.Now.ToString().

+1

Hmm donc selon vous je ne peux pas faire ce que je veux:/ –

+1

Non ce n'est pas je veux! Je ne peux pas faire: DateTime.Parse ("DateTime.Now.ToString()"); tu vois? –

+1

On ne sait toujours pas ce que vous vouliez. Voulez-vous une chaîne qui représente toujours le temps «maintenant»? Parce que ce n'est pas possible. Il doit être calculé, pas lu à partir d'un fichier de configuration. Les fichiers de configuration contiennent des valeurs statiques, si vous voulez qu'ils contiennent une valeur 'spéciale' qui indique au code de calculer l'heure, vous devrez alors la définir vous-même et la gérer afin que le code sache utiliser DateTime.Now. –

1
DateTime.Now.ToLongDateString(); 
DateTime.Now.ToLongTimeString(); 
DateTime.Now.ToShortDateString(); 
DateTime.Now.ToShortTimeString(); 
DateTime.Now.ToString("insert a valid date formatter string here"); 

BTW, si j'ai besoin de comprendre votre bien, la bonne solution serait:

parse the date from the text file with DateTime.TryParse(); 
now you have a DateTime variable with the text file date stored. 
now you can do 
DateTime textParsedDate = new DateTime(2010, 6, 4); //your textFile parsed date. 
int result = DateTime.Now.CompareTo(textParsedDate); //refer to the documentation to understand the result of DateTime.CompareTo 
1
var dateAsString = DateTime.Now.ToString(); 
Console.WriteLine(DateTime.Parse(dateAsString)); 

Le ToString() du bien produit maintenant ce que vous êtes après.

Son format est "04/06/2010 11:41:43"

0

Est-ce que vous voulez avoir le texte dans l'attribut de valeur être quelque chose comme un champ d'auto-mise à jour? Si c'est ce que vous voulez, je pense que la chose la plus proche que vous pouvez faire est de tenir un journal d'accès qui enregistre une entrée pour chaque demande, mais cela dépend bien sûr de la raison pour laquelle vous voulez les dates en premier lieu.

1

Il me semble que vous obtenez une chaîne d'un fichier de configuration et que vous vous attendez à ce qu'il contienne la date/heure actuelle. Vous vous attendez à se comporter un peu comme ce que les gens se sont habitués dans ASP.NET:

<p>Current date: <%= DateTime.Now.ToString() %>.</p> 

Pour faire la même chose de tout fichier de configuration, en supposant que votre fonction est appelée GetConfigParam (« StartTime »), vous peut effectuer les opérations suivantes:

<!-- inside config file --> 
<Parameter 
    Name="StartTime" 
    Value="Current date/time: {0}"/> 

<!-- or, if you just want the current date/time (but that gets a bit silly 
    as you can do that by code as has been suggested here before --> 
<Parameter Name="StartTime" Value="{0}" /> 

Ensuite, vous utilisez ce code pour l'analyse ci-dessus (le {0} sera rempli par String.Format et peut être utilisé avec tout objet):

string startTimeParam = GetConfigParam("StartTime"); 
string startTime = String.Format(startTimeParam, DateTime.Now); 
3

Comme d'autres l'ont suggéré, la meilleure solution serait d'ajouter du code pour vérifier une valeur magique avant d'exécuter votre valeur DateTime.Parse(...)

Si cela n'est pas possible pour une raison quelconque, la meilleure solution suivante est de spécifier uniquement l'heure; la date du jour en cours sera renvoyée avec l'heure spécifiée:

DateTime today = DateTime.Parse("12:34"); // Currently returns 2010/06/04 12:34 
+0

Cela fonctionnera pour moi! Je dois retourner DateTime.Now.Date en lisant dans les valeurs d'un fichier, et je n'ai pas accès au code d'analyse DateTime (c'est dans CsvHelper) pour manipuler en utilisant une chaîne pour représenter "{maintenant}". Mais j'ai le contrôle sur les valeurs dans le fichier, donc je peux simplement mettre des moments seulement quand je veux que la date soit DateTime.Now. – jgerman

Questions connexes