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;
Ashutosh
la source
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");
Falle1234
la source
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);
Dariusz Woźniak
la source
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");
SLaks
la source
11

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

TxtCalStDate.Text = Convert.ToDateTime(objItem["StartDate"]).ToString("yyyy/MM/dd");   
NSiva
la source
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");
Anish
la source
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);
Mudassir Hasan
la source
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

peter
la source
5

Faites simplement de cette façon.

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

Bon codage :)

Prashant-Systematix
la source
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 :)

SergioMSCosta
la source
3

C'est le moyen simple de convertir au format

 DateTime.Now.ToString("yyyyMMdd");
Manoj Kumar
la source
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.

Peter
la source
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"

ben alfasi
la source
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"));
Enrique Ortiz Sánchez
la source
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"); 
A. Zalonis
la source
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