Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Analizowanie ciągów w celu przekonwertowania ich na DateTime obiekty wymaga określenia informacji o tym, jak daty i godziny są reprezentowane jako tekst. Różne kultury używają różnych kolejności dla dnia, miesiąca i roku. Niektóre reprezentacje czasu używają zegara 24-godzinnego, inne określają "AM" i "PM". Niektóre aplikacje potrzebują tylko daty. Inni potrzebują tylko czasu. Nadal inne muszą określić zarówno datę, jak i godzinę. Metody konwertujące ciągi na DateTime obiekty pozwalają na podanie szczegółowych informacji na temat żądanych formatów oraz elementów daty i czasu, których potrzebuje aplikacja. Istnieją trzy podzadania do poprawnego konwertowania tekstu na :DateTime
- Należy określić oczekiwany format tekstu reprezentującego datę i godzinę.
- Możesz określić kulturę formatowania daty i godziny.
- Możesz określić, w jaki sposób brakujące składniki w reprezentacji tekstu są ustawiane w dacie i godzinie.
Metody Parse i TryParse konwertują wiele typowych reprezentacji daty i godziny. Metody ParseExact i TryParseExact konwertują reprezentację ciągu zgodną ze wzorcem określonym przez ciąg formatu daty i godziny. Aby uzyskać więcej informacji, zobacz artykuły dotyczące standardowych ciągów formatu daty i godziny oraz niestandardowych ciągów formatu daty i godziny.
Bieżący DateTimeFormatInfo obiekt zapewnia większą kontrolę nad sposobem interpretowania tekstu jako daty i godziny. Właściwości DateTimeFormatInfo opisują separatory daty i godziny, nazwy miesięcy, dni i er oraz format oznaczeń "AM" i "PM". Zwrócony CultureInfo przez CultureInfo.CurrentCulture element ma właściwość reprezentującą bieżącą CultureInfo.DateTimeFormat kulturę. Jeśli chcesz użyć określonej kultury lub ustawień niestandardowych, określ IFormatProvider parametr metody analizowania. Dla parametru IFormatProvider określ obiekt CultureInfo, który reprezentuje kulturę, lub obiekt DateTimeFormatInfo.
Tekst reprezentujący datę lub godzinę może nie zawierać niektórych informacji. Na przykład większość osób zakłada, że data "12 marca" reprezentuje bieżący rok. Podobnie "Marzec 2018" reprezentuje miesiąc marca w roku 2018. Tekst reprezentujący czas często zawiera tylko godziny, minuty i oznaczenie AM/PM. Metody analizowania obsługują brakujące informacje przy użyciu rozsądnych wartości domyślnych:
- Kiedy podana jest tylko godzina, część daty jest używana jako bieżąca data.
- Gdy jest obecna tylko data, część czasu to północ.
- Gdy rok nie jest określony w dacie, jest używany bieżący rok.
- Gdy dzień miesiąca nie jest określony, używany jest pierwszy dzień miesiąca.
Jeśli data jest obecna w ciągu, musi zawierać miesiąc i jeden dzień lub rok. Jeśli czas jest obecny, musi zawierać godzinę oraz minuty lub oznaczenie AM/PM.
Możesz określić stałą NoCurrentDateDefault , aby zastąpić te wartości domyślne. Jeśli używasz tej stałej, wszystkie brakujące właściwości roku, miesiąca lub dnia są ustawione na wartość 1. Ostatni przykład użycia Parse demonstruje to zachowanie.
Oprócz składnika daty i godziny ciąg reprezentujący datę i godzinę może zawierać przesunięcie wskazujące, ile czasu różni się od uniwersalnego czasu koordynowanego (UTC). Na przykład ciąg "2/14/2007 5:32:00 -7:00" definiuje czas, który wynosi siedem godzin wcześniej niż UTC. Jeśli przesunięcie zostanie pominięte z ciągu reprezentacji czasu, parsowanie zwraca DateTime obiekt z jego Kind właściwością ustawioną na DateTimeKind.Unspecified. Jeśli określono przesunięcie, analizowanie zwraca DateTime obiekt z właściwością jego Kind ustawioną na DateTimeKind.Localwartość. Jego wartość jest również dostosowywana do lokalnej strefy czasowej maszyny. To zachowanie można zmodyfikować przy użyciu DateTimeStyles wartości metody analizowania.
Dostawca formatu służy również do interpretowania niejednoznacznej daty liczbowej. Nie jest jasne, które składniki daty reprezentowane przez ciąg "02/03/04" są miesiącem, dniem i rokiem. Składniki są interpretowane zgodnie z kolejnością podobnych formatów dat u dostawcy formatu.
Parse
W poniższym przykładzie pokazano użycie metody DateTime.Parse do przekonwertowania string na DateTime. W tym przykładzie użyto kultury skojarzonej z bieżącym wątkiem.
CultureInfo Jeśli skojarzony z bieżącą kulturą nie może przeanalizować ciągu wejściowego, zostanie zgłoszony FormatException.
Uwaga / Notatka
Te przykłady są dostępne w repozytorium dokumentacji usługi GitHub dla języka C# i Visual Basic.
string dateInput = "Jan 1, 2009";
var parsedDate = DateTime.Parse(dateInput);
Console.WriteLine(parsedDate);
// Displays the following output on a system whose culture is en-US:
// 1/1/2009 00:00:00
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 00:00:00
Można również jawnie zdefiniować kulturę, której konwencje formatowania są używane podczas analizowania ciągu. Należy określić jeden ze standardowych obiektów DateTimeFormatInfo zwracanych przez właściwość CultureInfo.DateTimeFormat. W poniższym przykładzie użyto dostawcy formatu do przeanalizowania niemieckiego ciągu w obiekt DateTime. Tworzy on reprezentację CultureInfode-DE kultury. Ten CultureInfo obiekt zapewnia pomyślne analizowanie tego określonego ciągu. Ten proces uniemożliwia określenie, jakie ustawienie znajduje się w CurrentCulture obiekcie CurrentThread.
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
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
Można jednak użyć przeciążeń Parse metody, aby określić niestandardowych dostawców formatów. Metoda Parse nie obsługuje analizowania niestandardowych formatów. Aby przeanalizować datę i godzinę wyrażoną w formacie niestandardowym, użyj metody ParseExact.
W poniższym przykładzie wyliczenia DateTimeStyles użyto, aby określić, że aktualna data i godzina nie powinny być dodawane do DateTime dla pól nieokreślonych.
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
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
ParseExact
Metoda DateTime.ParseExact konwertuje ciąg na DateTime obiekt, jeśli jest zgodny z jednym z określonych wzorców ciągów. Gdy ciąg, który nie jest jedną z określonych form, jest przekazywany do tej metody, FormatException zostaje zgłoszony. Można określić jeden ze standardowych specyfikatorów formatu daty i godziny lub kombinację specyfikatorów formatu niestandardowego. Za pomocą specyfikatorów formatu niestandardowego można utworzyć niestandardowy ciąg rozpoznawania. Aby uzyskać wyjaśnienie specyfikatorów, zobacz artykuły dotyczące standardowych ciągów formatu daty i godziny oraz niestandardowych ciągów formatu daty i godziny.
W poniższym przykładzie metoda DateTime.ParseExact otrzymuje obiekt ciągu do analizy, następnie specyfikator formatu i obiekt CultureInfo. Ta ParseExact metoda może analizować tylko ciągi, które są zgodne ze wzorcem daty długiej en-US w kulturze.
var cultureInfo = new CultureInfo("en-US");
string[] dateStrings = { " Friday, April 10, 2009", "Friday, April 10, 2009" };
foreach (string dateString in dateStrings)
{
try
{
var dateTime = DateTime.ParseExact(dateString, "D", cultureInfo);
Console.WriteLine(dateTime);
}
catch (FormatException)
{
Console.WriteLine($"Unable to parse '{dateString}'");
}
}
// The example displays the following output:
// Unable to parse ' Friday, April 10, 2009'
// 4/10/2009 00:00:00
Dim MyCultureInfo As 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
' The example displays the following output:
' Unable to parse ' Friday, April 10, 2009'
' 4/10/2009 00:00:00
Każde przeciążenie metod Parse i ParseExact zawiera również parametr IFormatProvider, który dostarcza informacje specyficzne dla kultury dotyczące formatowania ciągu. Obiekt IFormatProvider jest obiektem reprezentującym CultureInfo standardową kulturę lub DateTimeFormatInfo obiekt zwracany przez CultureInfo.DateTimeFormat właściwość . ParseExact Używa również dodatkowego argumentu ciągu lub tablicy ciągów, który definiuje co najmniej jeden niestandardowy format daty i godziny.