Jak przekonwertować DateTime na / z określonego formatu ciągu (w obie strony, np. Podany format to „rrrrMMdd”)?

132

Mam problem z konwersją daty i godziny w formacie ciągu, ale nie mogę przekonwertować jej przy użyciu "yyyyMMdd"formatu.

Mój kod to:

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
źródło
W jakim formacie jest teraz ciąg daty i godziny?
Falle1234
11
A jakie jest znaczenie Twojego fragmentu kodu w stosunku do pytania?
Darin Dimitrov
2
Jestem trochę niejasny; pracujesz z ciągiem reprezentującym datę, czy z obiektem DateTime? Zakładając, że jest to obiekt DateTime, który możesz po prostu wywołać obj.ToString("yyyyMMdd");
Nathan Taylor
Właściwie TPOCDate2 jest już zmienną i chcę tylko przekonwertować elementy w tpoc2 [0] na format rrrrMMdd. Mam nadzieję, że to odpowiada na twoje pytanie
Ashutosh
Utknąłeś gdzieś?
Dariusz Woźniak

Odpowiedzi:

224

jeśli masz datę w ciągu znaków w formacie „ddMMyyyy” i chcesz przekonwertować ją na „rrrrMMdd”, możesz zrobić tak:

DateTime dt = DateTime.ParseExact(dateString, "ddMMyyyy", 
                                  CultureInfo.InvariantCulture);
dt.ToString("yyyyMMdd");
Falle1234
źródło
4
Utknąłem w kodzie, ten działał dobrze DateTime.TryParse (stringValue, out outputInDateTime);
DJ
64

Analiza daty i godziny:

Aby przeanalizować DateTime, użyj jednej z następujących metod:

Alternatywnie możesz użyć wzorca try-parse :

Przeczytaj więcej o niestandardowych ciągach formatujących datę i godzinę .

Konwersja DateTime na ciąg:

Aby zwrócić DateTime jako ciąg w formacie „rrrrMMdd”, możesz użyć ToStringmetody.

  • Przykład fragmentu kodu: string date = DateTime.ToString("yyyyMMdd");
  • Uwaga górnej obudowie M „S patrz miesięcy i niższy bocznym m ” s do kilku minut.

Twój przypadek:

W Twoim przypadku, zakładając, że nie chcesz obsługiwać scenariusza, w którym data ma inny format lub jej brakuje, najwygodniej byłoby użyć ParseExact:

string dateToParse = "20170506";
DateTime parsedDate = DateTime.ParseExact(dateToParse, 
                                          "yyyyMMdd",
                                          CultureInfo.InvariantCulture);
Dariusz Woźniak
źródło
7
To stary temat, ale dla szukających link powyżej „format specyficzny dla kultury” jest teraz martwym linkiem. Oto jeden, który jest aktualnym i pouczającym
40

Możesz przekonwertować swój ciąg na DateTimewartość taką:

DateTime date = DateTime.Parse(something);

Możesz przekonwertować DateTimewartość na sformatowany ciąg w następujący sposób:

date.ToString("yyyyMMdd");
SLaks
źródło
11

Ciąg do formatu daty rrrr-MM-dd: Przykład:

TxtCalStDate.Text = Convert.ToDateTime(objItem["StartDate"]).ToString("yyyy/MM/dd");   
NSiva
źródło
10

Jeśli chcesz, aby DATA była również ciągiem z CZASEM . Możemy to zrobić:

    //Date and Time is taking as current system Date-Time    
    DateTime.Now.ToString("yyyyMMdd-HHmmss");
Anish
źródło
7
minuty powinny być małe "m"!? „rrrrMMdd-GGmmss”
CeOnSql
6

Użyj, DateTime.TryParseExact()jeśli chcesz dopasować do określonego formatu daty

   string format = "yyyyMMdd"; 
    DateTime dateTime;
    DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture,
                                             DateTimeStyles.None, out dateTime);
Mudassir Hasan
źródło
5

Możesz użyć DateTime.TryParse()zamiast DateTime.Parse().
Z TryParse()masz wartość zwracaną, jeśli się powiodło i Parse()musisz obsłużyć wyjątek

Piotr
źródło
5

Po prostu zrób w ten sposób.

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

Miłego kodowania :)

Prashant-Systematix
źródło
3

nie, to ciąg z rrrr / mm / dd i potrzebuję go w formacie rrrrMMdd

Jeśli chcesz tylko usunąć ukośniki z łańcucha, czy nie po prostu je zastępujesz?

Przykład:

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

myDateString powinno teraz mieć wartość „20130328”.

Mniej przesady :)

SergioMSCosta
źródło
3

To prosty sposób na konwersję do formatu

 DateTime.Now.ToString("yyyyMMdd");
manoj kumar
źródło
2

Na podstawie nazw właściwości wygląda na to, że próbujesz przekonwertować ciąg na datę przez przypisanie:

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

Jest to prawdopodobnie spowodowane bieżącą kulturą interfejsu użytkownika i dlatego nie może poprawnie zinterpretować ciągu daty po przypisaniu.

Piotr
źródło
nie, to ciąg z rrrr / mm / dd i potrzebuję go w formacie rrrrMMdd
Ashutosh
i podczas wykonywania claimantAuxillaryRecord.TPOCDate2 = tpoc2 [0] .ToString ("yyyyMMdd"); daje pewne błędy kompilacji. Dopasowanie najlepszej przeciążonej metody dla „string.ToString (System.IFormatProvider)” zawiera nieprawidłowe argumenty
Ashutosh
@Matt - naprawdę? Edytowałeś odpowiedź trwającą ponad 4 lata, która nie została nawet oznaczona jako odpowiedź na dodanie karty? To poważny, zły przypadek OCD, który tam masz.
Peter
1

Z C # 6:

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

Wynik będzie taki: „2019-01-15T11: 46: 33.2752667Z”

ben alfasi
źródło
0

Prostszy sposób, na który natknąłem się również podczas wyszukiwania tej odpowiedzi;

string date = DateTime.Now.ToString("yyyyMMdd", System.Globalization.CultureInfo.GetCultureInfo("en-US"));
Enrique Ortiz Sánchez
źródło
Co powiesz na to, że mam wartość DateTime? Lubisz DateTime newDate = DateTime.Parse(Session["date"].ToString());?
WTFZane
0

Możesz wypróbować te kody

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

Lub

claimantAuxillaryRecord.TPOCDate2 = Convert.ToDateTime(tpoc2[0]).ToString("yyyyMMdd hh:mm:ss"); 
A. Zalonis
źródło
1
Na miłość boską (nasz pan zbawiciel Harambe), nigdy nie używaj Convert.ToDateTime ... To jest tak powolne (~ 100ms)! Po prostu użyj ParseExact lub TryParse - waaaaay szybciej !!!
Koshera