C # DateTime do formatu „RRRRMMDDGGMMSS”


621

Chcę przekonwertować C # DateTime na format „RRRRMMDDGGMMSS”. Ale nie znajduję wbudowanej metody uzyskania tego formatu? Jakieś komentarze?

Odpowiedzi:


1060
DateTime.Now.ToString("yyyyMMddHHmmss"); // case sensitive

35
czy to tylko ja myślę, że to wariactwo mieć duże M przez miesiące, a duże H przez wiele godzin?
Nick

69
m = minuty / M = miesiące, h = 12 godzin, H = 24 godziny. Podejrzewam, że ktoś zaczął od czasu i powiedział, że hms = godziny min sekundy, potem H stał się 24 godziny, a potem umówili się na randki i zabrakło im unikalnych liter, więc poszło z przypadkiem. To tylko jedna z tych rzeczy.
Douglas Anderson

2
Jak przeanalizujesz to z powrotem przy użyciu DateTime.Parse()?
Big Money

12
@BigMoney użyłbyś DateTime.ParseExact: var now = DateTime.ParseExact (stringVersion, „YYYYMMDDHHMMSS”, CultureInfo.InvariantCulture);
Jim Lamb

4
@BigMoney Podczas analizowania formatrozróżniana jest również wielkość liter, tj.DateTime.ParseExact(stringValue, "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
Nigel Touch

577

Ta strona ma świetne przykłady, sprawdź to

// create date time 2008-03-09 16:05:07.123
DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);

String.Format("{0:y yy yyy yyyy}",      dt);  // "8 08 008 2008"   year
String.Format("{0:M MM MMM MMMM}",      dt);  // "3 03 Mar March"  month
String.Format("{0:d dd ddd dddd}",      dt);  // "9 09 Sun Sunday" day
String.Format("{0:h hh H HH}",          dt);  // "4 04 16 16"      hour 12/24
String.Format("{0:m mm}",               dt);  // "5 05"            minute
String.Format("{0:s ss}",               dt);  // "7 07"            second
String.Format("{0:f ff fff ffff}",      dt);  // "1 12 123 1230"   sec.fraction
String.Format("{0:F FF FFF FFFF}",      dt);  // "1 12 123 123"    without zeroes
String.Format("{0:t tt}",               dt);  // "P PM"            A.M. or P.M.
String.Format("{0:z zz zzz}",           dt);  // "-6 -06 -06:00"   time zone

// month/day numbers without/with leading zeroes
String.Format("{0:M/d/yyyy}",           dt);  // "3/9/2008"
String.Format("{0:MM/dd/yyyy}",         dt);  // "03/09/2008"

// day/month names
String.Format("{0:ddd, MMM d, yyyy}",   dt);  // "Sun, Mar 9, 2008"
String.Format("{0:dddd, MMMM d, yyyy}", dt);  // "Sunday, March 9, 2008"

// two/four digit year
String.Format("{0:MM/dd/yy}",           dt);  // "03/09/08"
String.Format("{0:MM/dd/yyyy}",         dt);  // "03/09/2008"

Standardowe formatowanie daty i godziny

String.Format("{0:t}", dt);  // "4:05 PM"                           ShortTime
String.Format("{0:d}", dt);  // "3/9/2008"                          ShortDate
String.Format("{0:T}", dt);  // "4:05:07 PM"                        LongTime
String.Format("{0:D}", dt);  // "Sunday, March 09, 2008"            LongDate
String.Format("{0:f}", dt);  // "Sunday, March 09, 2008 4:05 PM"    LongDate+ShortTime
String.Format("{0:F}", dt);  // "Sunday, March 09, 2008 4:05:07 PM" FullDateTime
String.Format("{0:g}", dt);  // "3/9/2008 4:05 PM"                  ShortDate+ShortTime
String.Format("{0:G}", dt);  // "3/9/2008 4:05:07 PM"               ShortDate+LongTime
String.Format("{0:m}", dt);  // "March 09"                          MonthDay
String.Format("{0:y}", dt);  // "March, 2008"                       YearMonth
String.Format("{0:r}", dt);  // "Sun, 09 Mar 2008 16:05:07 GMT"     RFC1123
String.Format("{0:s}", dt);  // "2008-03-09T16:05:07"               SortableDateTime
String.Format("{0:u}", dt);  // "2008-03-09 16:05:07Z"              UniversalSortableDateTime

/*
Specifier   DateTimeFormatInfo property     Pattern value (for en-US culture)
    t           ShortTimePattern                    h:mm tt
    d           ShortDatePattern                    M/d/yyyy
    T           LongTimePattern                     h:mm:ss tt
    D           LongDatePattern                     dddd, MMMM dd, yyyy
    f           (combination of D and t)            dddd, MMMM dd, yyyy h:mm tt
    F           FullDateTimePattern                 dddd, MMMM dd, yyyy h:mm:ss tt
    g           (combination of d and t)            M/d/yyyy h:mm tt
    G           (combination of d and T)            M/d/yyyy h:mm:ss tt
    m, M        MonthDayPattern                     MMMM dd
    y, Y        YearMonthPattern                    MMMM, yyyy
    r, R        RFC1123Pattern                      ddd, dd MMM yyyy HH':'mm':'ss 'GMT' (*)
    s           SortableDateTi­mePattern             yyyy'-'MM'-'dd'T'HH':'mm':'ss (*)
    u           UniversalSorta­bleDateTimePat­tern    yyyy'-'MM'-'dd HH':'mm':'ss'Z' (*)
                                                    (*) = culture independent   
*/

Zaktualizuj za pomocą formatu interpolacji ciągów c # 6

// create date time 2008-03-09 16:05:07.123
DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);

$"{dt:y yy yyy yyyy}";  // "8 08 008 2008"   year
$"{dt:M MM MMM MMMM}";  // "3 03 Mar March"  month
$"{dt:d dd ddd dddd}";  // "9 09 Sun Sunday" day
$"{dt:h hh H HH}";      // "4 04 16 16"      hour 12/24
$"{dt:m mm}";           // "5 05"            minute
$"{dt:s ss}";           // "7 07"            second
$"{dt:f ff fff ffff}";  // "1 12 123 1230"   sec.fraction
$"{dt:F FF FFF FFFF}";  // "1 12 123 123"    without zeroes
$"{dt:t tt}";           // "P PM"            A.M. or P.M.
$"{dt:z zz zzz}";       // "-6 -06 -06:00"   time zone

// month/day numbers without/with leading zeroes
$"{dt:M/d/yyyy}";    // "3/9/2008"
$"{dt:MM/dd/yyyy}";  // "03/09/2008"

// day/month names
$"{dt:ddd, MMM d, yyyy}";    // "Sun, Mar 9, 2008"
$"{dt:dddd, MMMM d, yyyy}";  // "Sunday, March 9, 2008"

// two/four digit year
$"{dt:MM/dd/yy}";    // "03/09/08"
$"{dt:MM/dd/yyyy}";  // "03/09/2008"

Chciałbym ten format: yyyyMMddHHmm[+-]ZZzzgdzie część [+ -] ZZzz to strefa czasowa (liczba godzin, które należy dodać lub odjąć od daty GMT)
Kiquenet

zzzjest -06: 00 , chciałbym-0600
Kiquenet

2
@Kiquenet próbowałeś / aś .Replace(":", "") $"{dt:yyyyMMddHHmmzzz}".Replace(":", "")obejść
Nerdroid

Alternatywą jest dt.ToString("...");zastąpienie "..."powyższym formatem, np. "yyyy-MM-dd".
ToolmakerSteve

247

Praktycznie sam napisałeś ten format.

yourdate.ToString("yyyyMMddHHmmss")

  • MM = dwucyfrowy miesiąc
  • mm = dwie cyfry minut
  • GG = dwucyfrowa godzina, 24-godzinny zegar
  • hh = dwucyfrowa godzina, 12-godzinny zegar

Wszystko inne powinno być zrozumiałe.


92
„fff” da milisekundy, więc możesz użyć „yyyyMMddHHmmssfff”, aby podać ciąg znaków do milisekund.
Jeff Widmer

Jaka jest część strefy czasowej (liczba godzin, które należy dodać lub odjąć od daty GMT)?
Kiquenet

129

Musisz tylko zachować ostrożność między miesiącami (MM) a minutami (mm):

DateTime dt = DateTime.Now; // Or whatever
string s = dt.ToString("yyyyMMddHHmmss");

(Należy również pamiętać, że HH to zegar 24-godzinny, podczas gdy hh to zegar 12-godzinny, zwykle w połączeniu z t lub tt dla oznaczenia rano / godziny.)

Jeśli chcesz to zrobić jako część ciągu formatu złożonego, użyj:

string s = string.Format("The date/time is: {0:yyyyMMddHHmmss}", dt);

Aby uzyskać więcej informacji, zobacz stronę MSDN na temat niestandardowych formatów daty i godziny .


możliwe jest: now.ToString("yyyyMMdd_HHmmss")? Mam na myśli, czy można łączyć się z innymi postaciami, prawda?
DanielV

1
@DanielV: Tak, ale zacytowałbym dosłowne znaki (z apostrofami).
Jon Skeet

26

Możesz użyć łańcucha formatu niestandardowego:

DateTime d = DateTime.Now;
string dateString = d.ToString("yyyyMMddHHmmss");

Zamień „hh” na „HH”, jeśli nie chcesz mieć 24-godzinnego zegara.


21

Jeśli używasz ReSharper, uzyskaj pomoc dotyczącą „:” (patrz zdjęcie)

Intellisense


Tak samo jest z 2013 (i prawdopodobnie wcześniej) z ReSharper.
Wai Ha Lee,

18
DateTime.Now.ToString("yyyyMMddHHmmss");

jeśli chcesz, aby był wyświetlany jako ciąg


16

W .Net Standard 2możesz sformatować DateTimejak poniżej:

DateTime dt = DateTime.Now;
CultureInfo iv = CultureInfo.InvariantCulture;

// Default formats
// D - long date           Tuesday, 24 April 2018
// d - short date          04/24/2018
// F - full date long      Tuesday, 24 April 2018 06:30:00
// f - full date short     Tuesday, 24 April 2018 06:30
// G - general long        04/24/2018 06:30:00
// g - general short       04/24/2018 06:30
// U - universal full      Tuesday, 24 April 2018 06:30:00
// u - universal sortable  2018-04-24 06:30:00
// s - sortable            2018-04-24T06:30:00
// T - long time           06:30:00
// t - short time          06:30
// O - ISO 8601            2018-04-24T06:30:00.0000000
// R - RFC 1123            Tue, 24 Apr 2018 06:30:00 GMT           
// M - month               April 24
// Y - year month          2018 April
Console.WriteLine(dt.ToString("D", iv));

// Custom formats
// M/d/yy                  4/8/18
// MM/dd/yyyy              04/08/2018
// yy-MM-dd                08-04-18
// yy-MMM-dd ddd           08-Apr-18 Sun
// yyyy-M-d dddd           2018-4-8 Sunday
// yyyy MMMM dd            2018 April 08      
// h:mm:ss tt zzz          4:03:05 PM -03
// HH:m:s tt zzz           16:03:05 -03:00
// hh:mm:ss t z            04:03:05 P -03
// HH:mm:ss tt zz          16:03:05 PM -03      
Console.WriteLine(dt.ToString("M/d/yy", iv));


8

Dziwi mnie, że nikt nie ma linku do tego. dowolny format można utworzyć, korzystając z poniższych wskazówek:

Niestandardowe ciągi formatujące datę i godzinę

W swoim konkretnym przykładzie (jak wskazali inni) użyj czegoś takiego

my_format="yyyyMMddHHmmss";
DateTime.Now.ToString(my_format);

Gdzie mój_format może być dowolną kombinacją ciągów y, M, H, m, s, f, F i więcej! Sprawdź link.


1
Jon Skeet zawarł ten link w swojej odpowiedzi ( stackoverflow.com/a/3025377/12484 ).
Jon Schneider,

5

Uzyskaj datę jako DateTimeobiekt zamiast ciągu. Następnie możesz sformatować go, jak chcesz.

  • MM / dd / rrrr 22.08.2006
  • dddd, dd MMMM rrrr Wtorek, 22 sierpnia 2006 r
  • dddd, dd MMMM rrrr GG: mm Wtorek, 22 sierpnia 2006 r. 06:30
  • dddd, dd MMMM rrrr gg: mm tt Wtorek, 22 sierpnia 2006 06:30
  • dddd, dd MMMM rrrr H: mm Wtorek, 22 sierpnia 2006 6:30
  • dddd, dd MMMM rrrr g: mm tt Wtorek, 22 sierpnia 2006 r., godz. 6.30
  • dddd, dd MMMM rrrr GG: mm: ss wtorek, 22 sierpnia 2006 06:30:07
  • MM / dd / rrrr GG: mm 08/22/2006 06:30
  • MM / dd / rrrr gg: mm tt 08/22/2006 06:30
  • MM / dd / rrrr H: mm 08/22/2006 6:30
  • MM / dd / rrrr h: mm tt 08/22/2006 6:30 AM
  • MM / dd / rrrr GG: mm: ss 08/22/2006 06:30:07

Kliknij tutaj, aby uzyskać więcej wzorów



3

Prosta metoda, pełna kontrola nad „z typu” i „do typu”, a tylko trzeba pamiętać ten kod do przyszłych rzutów

DateTime.ParseExact(InputDate, "dd/MM/yyyy", CultureInfo.InvariantCulture).ToString("yyyy/MM/dd"));

2

To nic wielkiego. możesz po prostu tak ułożyć

WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss")}");

Przepraszam, bo użyłem $, który jest dla interpolacji ciągów.


0

Istnieje niewielkie prawdopodobieństwo, że żadna z powyższych odpowiedzi nie rozwiązałaby problemu. Niemniej jednak udostępniam moją metodę, która zawsze działa dla mnie dla różnych formatów danych.

//Definition   
     public static DateTime ConvertPlainStringToDatetime(string Date, string inputFormat, string  outputFormat)
            {
                DateTime date;
                CultureInfo enUS = new CultureInfo("en-US");
                DateTime.TryParseExact(Date, inputFormat, enUS,
                                    DateTimeStyles.AdjustToUniversal, out date);

                string formatedDateTime = date.ToString(outputFormat);
                return Convert.ToDateTime(formatedDateTime);   
            }
//Calling

    string oFormat = "yyyy-MM-dd HH:mm:ss";
    DateTime requiredDT = ConvertPlainStringToDatetime("20190205","yyyyMMddHHmmss", oFormat  );
    DateTime requiredDT = ConvertPlainStringToDatetime("20190508-12:46:42","yyyyMMdd-HH:mm:ss", oFormat);

-1

Po spędzeniu wielu godzin na wyszukiwaniu w Google znalazłem poniższe rozwiązanie, ponieważ kiedy lokalnie podaję datę, bez wyjątku, gdy z innego serwera wystąpił błąd ......... Data nie jest w odpowiednim formacie. Przed zapisaniem / przeszukaniem daty w polu tekstowym w C #, po prostu sprawdź, czy zewnętrzna kultura Serer jest taka sama jak kultura serwera bazy danych. Np. Oba powinny być „en-US” lub muszą być oba „en-GB” asp poniżej migawki.

wprowadź opis zdjęcia tutaj

Nawet przy innym formacie daty, jak (dd / mm / rrrr) lub (rrrr / mm / dd), zapisuje lub wyszukuje dokładnie.


Muszę skapitalizować te m - M to Miesiąc, m to minuta. Dałoby to na przykład 2017/51/10
Chris Moschini

Po prostu pokazuje format daty: dzień / miesiąc / rok lub rok / miesiąc / dzień ....... będzie wyszukiwał pomimo różnic kulturowych ... nie mylić z czasem ....... ......... ten format można ustawić na terminarzu dateTimePicker ........
Abdul Khaliq
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.