Comment convertir DateTime vers / à partir d'un format de chaîne spécifique (dans les deux sens, par exemple, le format donné est «aaaaMMjj»)?


132

J'ai un problème pour convertir un datetime qui est au format chaîne mais je ne peux pas le convertir en utilisant le "yyyyMMdd"format.

Mon code est:

string tpoc = refSubClaim.BenefitsFolder.BenefitFolderIdNumber.ToString();
string[] tpocinfo = Regex.Split(tpoc,";");

for (int i = 0; i < tpocinfo.Length; i++)
{
    switch (i)
    {
        case 0:
        {
            string[] tpoc2 = Regex.Split(tpocinfo[0], ",");
            claimantAuxillaryRecord.TPOCDate2 = tpoc2[0].ToString();
            claimantAuxillaryRecord.TPOCAmount2 = Convert.ToDecimal(tpoc2[1]);
            claimantAuxillaryRecord.FundingDelayedBeyondTPOCStartDate2 = tpoc2[2].ToString();
        }
        break;

Dans quel format est actuellement la chaîne datetime?
Falle1234

11
Et quelle est la pertinence de votre extrait de code par rapport à la question?
Darin Dimitrov

2
Je suis un peu flou; travaillez-vous avec une représentation sous forme de chaîne d'une date ou un objet DateTime? En supposant que c'est un objet DateTime que vous pouvez simplement appeler obj.ToString("yyyyMMdd");
Nathan Taylor

En fait, TPOCDate2 est déjà une variable et je veux juste convertir les éléments dans tpoc2 [0] pour être au format aaaaMMjj. J'espère que cela répond à votre question
Ashutosh

Êtes-vous coincé quelque part?
Dariusz Woźniak

Réponses:


224

si vous avez une date dans une chaîne au format "jjMMaaaa" et que vous voulez la convertir en "aaaaMMjj", vous pouvez faire comme ceci:

DateTime dt = DateTime.ParseExact(dateString, "ddMMyyyy", 
                                  CultureInfo.InvariantCulture);
dt.ToString("yyyyMMdd");

4
Je suis coincé avec votre code, celui-ci a bien fonctionné DateTime.TryParse (stringValue, out outputInDateTime);
DJ du

64

Analyse de DateTime:

Pour analyser un DateTime, appliquez l'une des méthodes suivantes:

Vous pouvez également utiliser le modèle try-parse :

En savoir plus sur les chaînes de format de date et d'heure personnalisées .

Conversion de DateTime en chaîne:

Pour renvoyer un DateHeure sous forme de chaîne au format "aaaaMMjj", vous pouvez utiliser la ToStringméthode.

  • Exemple d'extrait de code: string date = DateTime.ToString("yyyyMMdd");
  • Notez que les M majuscules font référence aux mois et les m minuscules aux minutes.

Ton cas:

Dans votre cas, en supposant que vous ne souhaitiez pas gérer le scénario lorsque la date est de format différent ou manquant, il serait plus pratique d'utiliser ParseExact:

string dateToParse = "20170506";
DateTime parsedDate = DateTime.ParseExact(dateToParse, 
                                          "yyyyMMdd",
                                          CultureInfo.InvariantCulture);

7
C'est un vieux sujet, mais pour ceux qui recherchent, le lien ci-dessus, "format spécifique à la culture" est maintenant un lien mort. En voici une qui est actuelle et informative Chaînes de format de date et d'heure personnalisées

40

Vous pouvez convertir votre chaîne en une DateTimevaleur comme celle-ci:

DateTime date = DateTime.Parse(something);

Vous pouvez convertir une DateTimevaleur en une chaîne formatée comme ceci:

date.ToString("yyyyMMdd");

11

Chaîne au format de date aaaa-MM-jj: Exemple:

TxtCalStDate.Text = Convert.ToDateTime(objItem["StartDate"]).ToString("yyyy/MM/dd");   

10

Si vous voulez avoir DATE comme chaîne avec TIME également. On peut faire comme ça:

    //Date and Time is taking as current system Date-Time    
    DateTime.Now.ToString("yyyyMMdd-HHmmss");

7
minutes devraient être petites "m"!? "aaaaMMjj-HHmmss"
CeOnSql

6

À utiliser DateTime.TryParseExact()si vous souhaitez faire correspondre un format de date spécifique

   string format = "yyyyMMdd"; 
    DateTime dateTime;
    DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture,
                                             DateTimeStyles.None, out dateTime);

5

Vous pouvez utiliser à la DateTime.TryParse()place de DateTime.Parse().
Avec TryParse()vous avez une valeur de retour si cela a réussi et avec Parse()vous devez gérer une exception


5

Faites simplement de cette façon.

string yourFormat = DateTime.Now.ToString("yyyyMMdd");

Bon codage :)


3

non, c'est une chaîne avec aaaa / mm / jj et j'en ai besoin au format aaaaMMjj

Si vous avez seulement besoin de supprimer les barres obliques d'une chaîne, ne les remplacez-vous pas simplement?

Exemple:

myDateString = "2013/03/28";
myDateString = myDateString.Replace("/", "");

myDateString doit maintenant être "20130328".

Moins d'une exagération :)


3

C'est le moyen simple de convertir au format

 DateTime.Now.ToString("yyyyMMdd");

2

En fonction des noms de propriété, il semble que vous essayez de convertir une chaîne en date par affectation:

claimantAuxillaryRecord.TPOCDate2 = tpoc2[0].ToString();

Cela est probablement dû à la culture actuelle de l'interface utilisateur et ne peut donc pas interpréter correctement la chaîne de date lorsqu'elle est affectée.


non, c'est une chaîne avec aaaa / mm / jj et j'en ai besoin au format aaaaMMjj
Ashutosh

et tout en exécutant claimantAuxillaryRecord.TPOCDate2 = tpoc2 [0] .ToString ("aaaaMMjj"); cela donne des erreurs de construction. La meilleure correspondance de méthode surchargée pour 'string.ToString (System.IFormatProvider)' a des arguments non valides
Ashutosh

@Matt - vraiment? Vous avez modifié une réponse de plus de 4 ans qui n'a même pas été marquée comme réponse pour ajouter un onglet? C'est un grave cas de TOC que vous avez là.
Peter

1

À partir de C # 6:

var dateTimeUtcAsString = $"{DateTime.UtcNow:o}";

Le résultat sera: "2019-01-15T11: 46: 33.2752667Z"


0

Une manière plus simple que j'ai rencontrée en recherchant cette réponse également;

string date = DateTime.Now.ToString("yyyyMMdd", System.Globalization.CultureInfo.GetCultureInfo("en-US"));

Et si j'avais une valeur pour DateTime? Comme DateTime newDate = DateTime.Parse(Session["date"].ToString());?
WTFZane

0

Vous pouvez essayer ces codes

claimantAuxillaryRecord.TPOCDate2  = Convert.ToDateTime(tpoc2[0]).ToString("yyyyMMdd"); 

Ou

claimantAuxillaryRecord.TPOCDate2 = Convert.ToDateTime(tpoc2[0]).ToString("yyyyMMdd hh:mm:ss"); 

1
Pour l'amour de Dieu (notre seigneur sauveur Harambe), n'utilisez jamais Convert.ToDateTime ... Cette chose est si lente (~ 100ms)! Utilisez simplement ParseExact ou TryParse - waaaaay plus vite !!!
Koshera
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.