Analýza řetězců data a času
Metody analýzy převádí řetězcové vyjádření data a času na odpovídající objekt DateTime. Metody Parse a TryParse převádí jakýkoli z několika běžných vyjádření data a času. Metody ParseExact a TryParseExact převádí řetězcové vyjádření, která odpovídají vzoru určeného řetězcem formátu data a času. (Navštivte témata Standardní řetězce formátu data a času a Vlastní řetězce formátu data a času.)
Analýza je ovlivněna vlastnostmi poskytovatele formátu, který dodává informace jako řetězce používané pro oddělovače data a času a názvy měsíců, dnů a období. Aktuální poskytovatel formátu je objekt DateTimeFormatInfo, který je implicitně poskytován jazykovou verzí aktuálního vlákna nebo explicitně parametrem IFormatProvider metody analýzy. Pro parametr IFormatProvider zadejte objekt CultureInfo, který představuje jazykovou verzi nebo objekt DateTimeFormatInfo.
Řetězcové vyjádření data, které má být analyzováno, musí zahrnovat měsíc a alespoň den nebo rok. Řetězcové vyjádření času musí zahrnovat hodinu a alespoň minutu nebo označení dopoledního či odpoledního času. Pokud je to však možné, analýze poskytne výchozí hodnoty pro vynechané součásti. Standardně je chybějící datum nastaveno na aktuální datum, chybějící rok na aktuální rok, chybějící den měsíce na první den v měsíci a chybějící čas je nastaven na půlnoc.
Pokud řetězcové vyjádření určuje pouze čas, analýze vrátí objekt DateTime s vlastnostmi Year, Month a Day nastavenými na odpovídající hodnoty vlastnosti Today. Pokud je však konstanta NoCurrentDateDefault zadána v metodě analýzy, výsledné vlastnosti roku, měsíce a dne jsou nastaveny na hodnotu 1.
Kromě součástí data a času může řetězcové vyjádření data a času zahrnovat posun označující o kolik se daný čas liší od času UTC. Například řetězec "2/14/2007 5:32:00 -7: 00" definuje čas, který je o sedm hodin časnější než čas UTC. Pokud je posun z řetězcového vyjádření času vynechán, analýze vrátí objekt DateTime s vlastností Kind nastavenou na DateTimeKind.Unspecified. Pokud je posun zadán, analýza vrátí objekt DateTime s vlastností Kind nastavenou na Local a s hodnotou upravenou pro místní časové pásmo počítače. Toto chování můžete upravit pomocí použití konstanty DateTimeStyles s metodou analýzy.
Poskytovatel formátu se také používá k interpretaci dvojznačného číselného data. Například není jasné, které součásti data představovaného řetězcem "02/03/04" jsou měsíc, den a rok. V takovémto případě jsou komponenty interpretovány podle pořadí v podobných formátech data v poskytovateli formátu.
Parse
V následujícím příkladu kódu je ukázáno využití metody Parsepro převedení řetězce na DateTime. V tomto příkladu je pro prováděnou analýzu použita jazyková verze spojená s aktuálním vláknem. Pokud CultureInfo přidružené k aktuální jazykové verzi nemůže analyzovat vstupní řetězec, je vyvolána FormatException.
Dim MyString As String = "Jan 1, 2009"
Dim MyDateTime As DateTime = DateTime.Parse(MyString)
Console.WriteLine(MyDateTime)
' Displays the following output on a system whose culture is en-US:
' 1/1/2009 12:00:00 AM
string MyString = "Jan 1, 2009";
DateTime MyDateTime = DateTime.Parse(MyString);
Console.WriteLine(MyDateTime);
// Displays the following output on a system whose culture is en-US:
// 1/1/2009 12:00:00 AM
Také můžete určit CultureInfo nastavením na jednu z jazykových verzí definovaných tímto objektem nebo můžete zadat jeden ze standardních objektů DateTimeFormatInfo vrácených vlastností CultureInfo.DateTimeFormat. V následujícím příkladu kódu je použit poskytovatel formátu pro analyzování německého řetězce na DateTime. Objekt CultureInfo představující jazykovou verzi de-DE je definován a předán společně s analyzovaným řetězcem pro zaručení úspěšné analýzy tohoto konkrétního řetězce. To vylučuje jakékoli nastavení CurrentCulture v CurrentThread.
Imports System.Globalization
Module Example
Public Sub Main()
Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2008"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyDateTime)
End Sub
End Module
' The example displays the following output:
' 6/12/2008 12:00:00 AM
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2008";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);
Console.WriteLine(MyDateTime);
}
}
// The example displays the following output:
// 6/12/2008 12:00:00 AM
Přestože lze použít přetížení metody Parse pro určení vlastních poskytovatelů formátu, metoda nepodporuje používání nestandardních poskytovatelů formátu. Chcete-li analyzovat data a časy vyjádřené v nestandardním formátu, použijte raději metodu ParseExact.
V následujícím příkladu kódu je použit výčet DateTimeStyles pro určení, že informace aktuálního data a času by neměly být přidávány do položek DateTime, které řetězec nedefinuje.
Imports System.Globalization
Module Example
Public Sub Main()
Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2008"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo, _
DateTimeStyles.NoCurrentDateDefault)
Console.WriteLine(MyDateTime)
End Sub
End Module
' The example displays the following output if the current culture is en-US:
' 6/12/2008 12:00:00 AM
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2008";
DateTime MyDateTime = 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 12:00:00 AM
ParseExact
Metoda DateTime.ParseExact převede řetězec, který odpovídá zadanému vzoru řetězce, na objekt DateTime. Pokud je metodě předán řetězec, který není v určeném tvaru, je vyvolána FormatException. Můžete zadat jeden ze specifikátorů standardního formátu data a času nebo omezenou kombinaci specifikátorů vlastního formátu data a času. Pomocí specifikátorů vlastního formátu je možné sestavit vlastní rozpoznávací řetězec. Další informace o specifikátorech naleznete v tématech Standardní řetězce formátu data a času a Vlastní řetězce formátu datum a čas.
Každé přetížení metody ParseExact má také parametr IFormatProvider, který obvykle poskytuje informace specifické jazykové verze o formátování řetězce. Obvykle je tento objekt IFormatProvider objektem CultureInfo, který představuje standardní jazykovou verzi nebo objekt DateTimeFormatInfo, který je vrácen vlastností CultureInfo.DateTimeFormat. Avšak na rozdíl od jiných funkcí analýzy data a času tato metoda podporuje také IFormatProvider definující nestandardní formát data a času.
V následujícím příkladu kódu je metodě ParseExact předán objekt řetězce k analyzování, následovaný specifikátorem formátu, následovaný objektem CultureInfo. Tato metoda ParseExact je schopna analyzovat pouze řetězce, které vykazují vzorem dlouhého formátu data v jazykové verzi en-US.
Imports System.Globalization
Module Example
Public Sub Main()
Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
Dim MyString() As String = {" Friday, April 10, 2009", "Friday, April 10, 2009"}
For Each dateString As String In MyString
Try
Dim MyDateTime As DateTime = DateTime.ParseExact(dateString, "D", _
MyCultureInfo)
Console.WriteLine(MyDateTime)
Catch e As FormatException
Console.WriteLine("Unable to parse '{0}'", dateString)
End Try
Next
End Sub
End Module
' The example displays the following output:
' Unable to parse ' Friday, April 10, 2009'
' 4/10/2009 12:00:00 AM
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
CultureInfo MyCultureInfo = new CultureInfo("en-US");
string[] MyString = {" Friday, April 10, 2009", "Friday, April 10, 2009"};
foreach (string dateString in MyString)
{
try {
DateTime MyDateTime = DateTime.ParseExact(dateString, "D", MyCultureInfo);
Console.WriteLine(MyDateTime);
}
catch (FormatException) {
Console.WriteLine("Unable to parse '{0}'", dateString);
}
}
}
}
// The example displays the following output:
// Unable to parse ' Friday, April 10, 2009'
// 4/10/2009 12:00:00 AM
Viz také
Koncepty
Převod typů v rozhraní .NET Framework