Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A .NET számos típust biztosít a dátum- és időadatok kezeléséhez, amelyek mindegyike különböző forgatókönyvekhez van optimalizálva:
- DateTime – Egy dátumot és időt jelöl együtt, ideális, ha mindkét összetevőre vagy az örökölt kód használatakor van szüksége.
- DateOnly (a .NET-keretrendszerben nem érhető el) – Csak olyan dátumot jelöl, amely nem tartalmaz időadatokat, ideális születésnapokhoz, évfordulókhoz vagy üzleti dátumokhoz.
- TimeOnly (a .NET-keretrendszerben nem érhető el) – Csak dátuminformáció nélküli időpontot jelöl, ideális ütemezésekhez, riasztásokhoz vagy ismétlődő napi eseményekhez.
Minden típus olyan elemzési metódusokat biztosít, amelyek a sztringeket a saját objektumaikká alakítják, különböző rugalmassági szintekkel és az elemzési folyamat szabályozásával.
Általános elemzési fogalmak
Mindhárom dátum- és időtípus hasonló elemzési módszerekkel rendelkezik:
-
ParseésTryParsemetódusok – Számos gyakori sztring-ábrázolás átalakítása az aktuális vagy megadott kultúrális beállítások alkalmazásával. -
ParseExactésTryParseExactmetódusok – Adott formátummintáknak megfelelő karakterláncok konvertálása, amely pontos vezérlést biztosít a várt formátumok felett, beleértve a kulturális beállításokat is. - Formátum karakterláncok – Minták definiálása elemzés céljából szabványos vagy egyedi formátumjelölők segítségével.
A különböző kultúrák különböző megrendeléseket használnak nap, hónap és év szerint. Egyes időábrázolások 24 órás órát használnak, mások az "AM" és a "PM" értéket adják meg. Az elemzési metódusok a kultúraspecifikus formázási szabályokkal kezelik ezeket a változatokat.
Az DateTimeFormatInfo objektum szabályozza a szöveg értelmezésének módját. A tulajdonságok a dátum- és időelválasztókat, a hónapok, napok, korok nevét, valamint az "AM" és a "PM" megjelölések formátumát írják le. A IFormatProvider paraméteren keresztül megadhatja a kultúrát egy CultureInfo objektum vagy egy DateTimeFormatInfo objektum használatával.
A formázási mintákkal kapcsolatos további információkért tekintse meg a szabványos dátum- és időformátum-sztringeket , valamint az egyéni dátum- és időformátum-sztringeket.
Dátum és idő elemzése
DateTime a dátum- és időösszetevőket együtt jelöli. A stringek objektumoknak való DateTime elemzésekor több DateTime-specifikus szempontot is figyelembe kell venni:
-
Hiányzó információkezelés -
DateTimealapértelmezéseket használ, ha a bemeneti sztringből hiányoznak alkatrészek. -
Időzóna és UTC-eltolás támogatása -
DateTimehelyi, UTC vagy meghatározatlan időzónákat jelölhet. - Kombinált dátum- és időelemzés – Egyetlen művelet dátum- és időösszetevőit is kezelnie kell.
Hiányzó információkezelés
Előfordulhat, hogy a dátumot vagy időt ábrázoló szövegből hiányzik néhány információ. A legtöbben például azt feltételezik, hogy a "Március 12" dátum az aktuális évet jelöli. Hasonlóképpen, a "2018. március" a 2018. évi márciusi hónap. Az időt ábrázoló szöveg gyakran csak órákat, perceket és am/PM megjelölést tartalmaz.
DateTime Az elemzési metódusok ésszerű alapértelmezett beállításokkal kezelik ezt a hiányzó információt:
- Ha csak az idő jelenik meg, a dátumrész az aktuális dátumot használja.
- Ha csak a dátum van jelen, az időrész éjfél.
- Ha az év nincs megadva egy dátumban, a rendszer az aktuális évet használja.
- Ha nincs megadva a hónap napja, a rendszer a hónap első napját használja.
Ha a dátum szerepel a láncban, akkor annak tartalmaznia kell a hónapot, valamint a napot vagy az évet is. Ha az időpont meg van adva, annak tartalmaznia kell az órát, és vagy a perceket, vagy az AM/PM jelölőt.
Az alapértelmezett értékek felülbírálásához megadhatja az NoCurrentDateDefault állandót. Ha ezt az állandót használja, a hiányzó év-, hónap- vagy naptulajdonságok az értékre 1lesznek állítva. Ezt a viselkedést az utolsó példaParse szemlélteti.
UTC-eltolás és időzóna kezelése
A dátum és az idő összetevő mellett a dátum és az idő sztring-ábrázolása olyan eltolást is tartalmazhat, amely azt jelzi, hogy az idő mennyiben tér el az egyezményes világidőtől (UTC). A "2007.02.14. 5:32:00 -7:00" sztring például az UTC-nél hét órával korábbi időpontot határoz meg. Ha egy idő sztring-ábrázolása nem tartalmaz eltolást, az elemzés egy DateTime objektumot ad vissza, amelynek Kind tulajdonsága DateTimeKind.Unspecified-ra van állítva. Ha eltolás van megadva, az elemzés egy DateTime objektumot ad vissza, amelynek a(z) Kind tulajdonsága DateTimeKind.Local-re van állítva. Az érték a gép helyi időzónájához is igazodik. Ezt a viselkedést egy DateTimeStyles érték használatával módosíthatja az elemzési módszerrel.
Nem egyértelmű dátumkezelés
A formátumszolgáltató egy nem egyértelmű numerikus dátum értelmezésére is használható. Nem világos, hogy a "02/03/04" karakterlánc által képviselt dátum hónapja, napja és éve melyek. Az összetevőket a formátumszolgáltató hasonló dátumformátumainak sorrendje szerint értelmezi a rendszer.
DateTime.Parse
Az alábbi példa azt mutatja be, hogyan konvertálhat egy DateTime.Parse-t egy string-vé a DateTime metódus használatával. Ez a példa az aktuális szálhoz társított kultúrát használja. Ha az CultureInfo aktuális kulturális környezethez társított nem tudja elemezni a bemeneti sztringet, a rendszer egy FormatException értéket ad.
static void DateTimeParseExample()
{
// Parse common date and time formats using current culture
var dateTime1 = DateTime.Parse("1/15/2025 3:30 PM");
var dateTime2 = DateTime.Parse("January 15, 2025");
var dateTime3 = DateTime.Parse("15:30:45");
Console.WriteLine($"Parsed: {dateTime1}");
Console.WriteLine($"Parsed: {dateTime2}");
Console.WriteLine($"Parsed: {dateTime3}");
// Parse with specific culture
var germanDate = DateTime.Parse("15.01.2025", new CultureInfo("de-DE"));
Console.WriteLine($"German date parsed: {germanDate}");
}
Sub DateTimeParseExample()
' Parse common date and time formats using current culture
Dim dateTime1 = DateTime.Parse("1/15/2025 3:30 PM")
Dim dateTime2 = DateTime.Parse("January 15, 2025")
Dim dateTime3 = DateTime.Parse("15:30:45")
Console.WriteLine($"Parsed: {dateTime1}")
Console.WriteLine($"Parsed: {dateTime2}")
Console.WriteLine($"Parsed: {dateTime3}")
' Parse with specific culture
Dim germanDate = DateTime.Parse("15.01.2025", New CultureInfo("de-DE"))
Console.WriteLine($"German date parsed: {germanDate}")
End Sub
Explicit módon megadhatja azt a kultúrát is, amelynek formázási konvencióit sztring elemzésekor használja a rendszer. Megadhatja a tulajdonság által visszaadott standard DateTimeFormatInfo objektumok egyikét CultureInfo.DateTimeFormat . Az alábbi példa egy formátumszolgáltató használatával értelmez egy német karakterláncot egy DateTime-re. Létrehoz egy CultureInfo, ami a(z) de-DE kultúrát képviseli. Ez az CultureInfo objektum biztosítja az adott sztring sikeres elemzését. Ez a folyamat meggátolja bármilyen beállítás érvényesülését a CurrentCulture a(z) CurrentThread-ben.
static void DateTimeParseGermanExample()
{
var cultureInfo = new CultureInfo("de-DE");
string dateString = "12 Juni 2008";
var dateTime = DateTime.Parse(dateString, cultureInfo);
Console.WriteLine(dateTime);
// The example displays the following output:
// 6/12/2008 00:00:00
}
Sub DateTimeParseGermanExample()
Dim MyCultureInfo As New CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2008"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyDateTime)
' The example displays the following output:
' 6/12/2008 00:00:00
End Sub
A Parse metódus túlterhelését azonban használhatja egyéni formátumszolgáltatók megadására. A Parse metódus nem támogatja a nem szabványos formátumok elemzését. Ha nem szabványos formátumban szeretné elemezni a dátumot és az időt, használja inkább a metódust ParseExact .
Az alábbi példa az DateTimeStyles enumerálással határozza meg, hogy az aktuális dátum- és időinformációk ne legyenek hozzáadva a DateTime meghatározatlan mezőkhöz.
static void DateTimeParseNoDefaultExample()
{
var cultureInfo = new CultureInfo("de-DE");
string dateString = "12 Juni 2008";
var dateTime = DateTime.Parse(dateString, cultureInfo,
DateTimeStyles.NoCurrentDateDefault);
Console.WriteLine(dateTime);
// The example displays the following output if the current culture is en-US:
// 6/12/2008 00:00:00
}
Sub DateTimeParseNoDefaultExample()
Dim MyCultureInfo As New CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2008"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo,
DateTimeStyles.NoCurrentDateDefault)
Console.WriteLine(MyDateTime)
' The example displays the following output if the current culture is en-US:
' 6/12/2008 00:00:00
End Sub
DateTime.ParseExact
A DateTime.ParseExact metódus objektummá konvertál egy sztringet DateTime , ha az megfelel a megadott sztringminták egyikének. Ha a megadott űrlapok egyike sem egy sztringet ad át ehhez a metódushoz, a függvény egy FormatException karaktert ad vissza. Megadhatja a szabványos dátum- és időformátum-meghatározók egyikét, vagy az egyéni formátumjelölők kombinációját. Az egyéni formátumjelölők használatával egyéni felismerési sztringet hozhat létre. A kijelölők magyarázatát a standard dátum- és időformátum sztringjeiről , valamint az egyéni dátum- és időformátum-sztringekről szóló cikkekben talál.
A következő példában a DateTime.ParseExact metódus egy sztringobjektumot ad át az elemzéshez, majd egy formátumkijelölőt, majd egy CultureInfo objektumot. Ez a ParseExact módszer csak a hosszú dátummintát követő karakterláncokat elemezheti a en-US kultúrában.
static void DateTimeParseExactExample()
{
// Parse exact format
var exactDate = DateTime.ParseExact("2025-01-15T14:30:00", "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture);
Console.WriteLine($"Exact parse: {exactDate}");
// Parse with custom format
var customDate = DateTime.ParseExact("15/Jan/2025 2:30 PM", "dd/MMM/yyyy h:mm tt", CultureInfo.InvariantCulture);
Console.WriteLine($"Custom format: {customDate}");
}
Sub DateTimeParseExactExample()
' Parse exact format
Dim exactDate = DateTime.ParseExact("2025-01-15T14:30:00", "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture)
Console.WriteLine($"Exact parse: {exactDate}")
' Parse with custom format
Dim customDate = DateTime.ParseExact("15/Jan/2025 2:30 PM", "dd/MMM/yyyy h:mm tt", CultureInfo.InvariantCulture)
Console.WriteLine($"Custom format: {customDate}")
End Sub
A Parse és ParseExact metódusok minden egyes túlterhelése rendelkezik egy IFormatProvider paraméterrel, amely kultúraspecifikus információkat nyújt a karakterlánc formázásáról. Az IFormatProvider objektum egy CultureInfo olyan objektum, amely egy standard kultúrát vagy egy DateTimeFormatInfo , a CultureInfo.DateTimeFormat tulajdonság által visszaadott objektumot jelöl. ParseExact egy további sztring- vagy sztringtömb argumentumot is használ, amely egy vagy több egyéni dátum- és időformátumot határoz meg.
DateOnly feldolgozás
A DateOnly struktúra csak egy dátumot jelöl, amely nem tartalmaz időadatokat, így tökéletes választás olyan helyzetekhez, mint a születésnapok, évfordulók vagy üzleti dátumok. Mivel nincs időösszetevője, a nap elejétől a nap végéig egy dátumot jelöl.
DateOnly számos előnnyel rendelkezik a csak dátumalapú forgatókönyvekhez való használattal DateTime szemben:
- A
DateTimestruktúra az előző vagy a következő napra kerülhet, ha egy időzóna eltolása történik.DateOnlynem lehet időzóna szerint áthelyezni, és mindig a beállított dátumot képviseli. - A szerializálás
DateOnlykevesebb adatot tartalmaz, mintDateTimea . - Amikor a kód egy adatbázissal (például az SQL Serverrel) kommunikál, a rendszer általában a teljes dátumokat tárolja adattípusként
date, ami nem tartalmaz időt.DateOnlyjobban megfelel az adatbázis típusának.
DateOnly.Parse
A DateOnly.Parse metódus a gyakori dátumsztring-ábrázolásokat objektummá DateOnly alakítja. A metódus különböző formátumokat fogad el, és az aktuális vagy egy adott kultúrát használja elemzésre.
static void DateOnlyParseExample()
{
// Parse common date formats
var date1 = DateOnly.Parse("1/15/2025");
var date2 = DateOnly.Parse("January 15, 2025", CultureInfo.InvariantCulture);
var date3 = DateOnly.Parse("2025-01-15");
Console.WriteLine($"Parsed date: {date1}");
Console.WriteLine($"Parsed date: {date2.ToString("D")}"); // Long date format
Console.WriteLine($"Parsed date: {date3.ToString("yyyy-MM-dd")}");
// Parse with specific culture
var germanDate = DateOnly.Parse("15.01.2025", new CultureInfo("de-DE"));
Console.WriteLine($"German date: {germanDate}");
}
Sub DateOnlyParseExample()
' Parse common date formats
Dim date1 = DateOnly.Parse("1/15/2025")
Dim date2 = DateOnly.Parse("January 15, 2025", CultureInfo.InvariantCulture)
Dim date3 = DateOnly.Parse("2025-01-15")
Console.WriteLine($"Parsed date: {date1}")
Console.WriteLine($"Parsed date: {date2.ToString("D")}") ' Long date format
Console.WriteLine($"Parsed date: {date3.ToString("yyyy-MM-dd")}")
' Parse with specific culture
Dim germanDate = DateOnly.Parse("15.01.2025", New CultureInfo("de-DE"))
Console.WriteLine($"German date: {germanDate}")
End Sub
DateOnly.ParseExact
A DateOnly.ParseExact metódus pontos vezérlést biztosít a bemeneti sztring várt formátuma felett. Ezt a módszert akkor használja, ha ismeri a dátumsztring pontos formátumát, és szigorú elemzést szeretne biztosítani.
static void DateOnlyParseExactExample()
{
// Parse exact format
var exactDate = DateOnly.ParseExact("21 Oct 2015", "dd MMM yyyy", CultureInfo.InvariantCulture);
Console.WriteLine($"Exact date: {exactDate}");
// Parse ISO format
var isoDate = DateOnly.ParseExact("2025-01-15", "yyyy-MM-dd", CultureInfo.InvariantCulture);
Console.WriteLine($"ISO date: {isoDate}");
// Parse with multiple possible formats
string[] formats = { "MM/dd/yyyy", "M/d/yyyy", "dd/MM/yyyy" };
var flexibleDate = DateOnly.ParseExact("1/15/2025", formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
Console.WriteLine($"Flexible parse: {flexibleDate}");
}
Sub DateOnlyParseExactExample()
' Parse exact format
Dim exactDate = DateOnly.ParseExact("21 Oct 2015", "dd MMM yyyy", CultureInfo.InvariantCulture)
Console.WriteLine($"Exact date: {exactDate}")
' Parse ISO format
Dim isoDate = DateOnly.ParseExact("2025-01-15", "yyyy-MM-dd", CultureInfo.InvariantCulture)
Console.WriteLine($"ISO date: {isoDate}")
' Parse with multiple possible formats
Dim formats() As String = {"MM/dd/yyyy", "M/d/yyyy", "dd/MM/yyyy"}
Dim flexibleDate = DateOnly.ParseExact("1/15/2025", formats, CultureInfo.InvariantCulture, DateTimeStyles.None)
Console.WriteLine($"Flexible parse: {flexibleDate}")
End Sub
A ParseExact metódus egyetlen formátumsztringet vagy formátumsztring-tömböt fogad el, így több elfogadható formátumban is elemezheti a dátumokat.
TimeOnly elemzés
A TimeOnly struktúra egy napközbeni értéket jelöl, például egy napi ébresztőórát, vagy azt, hogy mikor ebédel minden nap.
TimeOnly a 00:00:00.0000000 - 23:59:59.99999999 tartományra korlátozódik, amely egy adott napidő.
TimeOnly számos olyan problémát old meg, amely más típusú, csak időalapú forgatókönyvek használata esetén is fennállt:
-
TimeSpanaz eltelt időt jelöli, és negatív vagy 24 órát meghaladó lehet, így nem alkalmas egy adott napidőre. - Az
DateTimeidőpontként való használata tetszőleges dátum megadását igényli, ami váratlan viselkedést eredményezhet számítások elvégzésekor. -
TimeOnlytermészetesen kezeli a 24 órás váltást az időértékek hozzáadásakor vagy kivonásakor.
TimeOnly.Parse
A TimeOnly.Parse metódus a közös idő sztring-ábrázolásait objektummá TimeOnly alakítja. A metódus különböző formátumokat fogad el, beleértve a 12 órás és a 24 órás jelölést.
static void TimeOnlyParseExample()
{
// Parse common time formats
var time1 = TimeOnly.Parse("14:30:15");
var time2 = TimeOnly.Parse("2:30 PM", CultureInfo.InvariantCulture);
var time3 = TimeOnly.Parse("17:45");
Console.WriteLine($"Parsed time: {time1}");
Console.WriteLine($"Parsed time: {time2.ToString("t")}"); // Short time format
Console.WriteLine($"Parsed time: {time3.ToString("HH:mm")}");
// Parse with milliseconds
var preciseTime = TimeOnly.Parse("14:30:15.123");
Console.WriteLine($"Precise time: {preciseTime.ToString("HH:mm:ss.fff")}");
}
Sub TimeOnlyParseExample()
' Parse common time formats
Dim time1 = TimeOnly.Parse("14:30:15")
Dim time2 = TimeOnly.Parse("2:30 PM", CultureInfo.InvariantCulture)
Dim time3 = TimeOnly.Parse("17:45")
Console.WriteLine($"Parsed time: {time1}")
Console.WriteLine($"Parsed time: {time2.ToString("t")}") ' Short time format
Console.WriteLine($"Parsed time: {time3.ToString("HH:mm")}")
' Parse with milliseconds
Dim preciseTime = TimeOnly.Parse("14:30:15.123")
Console.WriteLine($"Precise time: {preciseTime.ToString("HH:mm:ss.fff")}")
End Sub
TimeOnly.ParseExact
A TimeOnly.ParseExact metódus pontosan szabályozza a bemeneti idő sztringjének várt formátumát. Ezt a módszert akkor használja, ha ismeri a pontos formátumot, és szigorú elemzést szeretne biztosítani.
static void TimeOnlyParseExactExample()
{
// Parse exact format
var exactTime = TimeOnly.ParseExact("5:00 pm", "h:mm tt", CultureInfo.InvariantCulture);
Console.WriteLine($"Exact time: {exactTime}");
// Parse 24-hour format
var militaryTime = TimeOnly.ParseExact("17:30:25", "HH:mm:ss", CultureInfo.InvariantCulture);
Console.WriteLine($"Military time: {militaryTime}");
// Parse with multiple possible formats
string[] timeFormats = { "h:mm tt", "HH:mm", "H:mm" };
var flexibleTime = TimeOnly.ParseExact("2:30 PM", timeFormats, CultureInfo.InvariantCulture, DateTimeStyles.None);
Console.WriteLine($"Flexible time parse: {flexibleTime}");
}
Sub TimeOnlyParseExactExample()
' Parse exact format
Dim exactTime = TimeOnly.ParseExact("5:00 pm", "h:mm tt", CultureInfo.InvariantCulture)
Console.WriteLine($"Exact time: {exactTime}")
' Parse 24-hour format
Dim militaryTime = TimeOnly.ParseExact("17:30:25", "HH:mm:ss", CultureInfo.InvariantCulture)
Console.WriteLine($"Military time: {militaryTime}")
' Parse with multiple possible formats
Dim timeFormats() As String = {"h:mm tt", "HH:mm", "H:mm"}
Dim flexibleTime = TimeOnly.ParseExact("2:30 PM", timeFormats, CultureInfo.InvariantCulture, DateTimeStyles.None)
Console.WriteLine($"Flexible time parse: {flexibleTime}")
End Sub