.NET'te tarih ve saat dizelerini ayrıştırma
Dizeleri nesnelere dönüştürmek için ayrıştırmak, tarih ve saatlerin metin DateTime olarak nasıl temsil edildiklerine ilişkin bilgileri belirtmenizi gerektirir. Farklı kültürler gün, ay ve yıl için farklı siparişler kullanır. Bazı zaman gösterimleri 24 saatlik bir saat kullanırken diğerleri "AM" ve "PM" belirtir. Bazı uygulamaların yalnızca tarihe ihtiyacı vardır. Diğerlerinde yalnızca zaman gerekir. Yine de diğerlerinin hem tarihi hem de saati belirtmesi gerekir. Dizeleri nesnelere dönüştüren yöntemler, beklediğiniz biçimler ve uygulamanıza gereken tarih ve saat DateTime öğeleri hakkında ayrıntılı bilgi sağlamanızı sağlar. Metni doğru bir şekilde bir içine dönüştürmek için üç alt görev DateTime vardır:
- Tarih ve saati temsil eden metnin beklenen biçimini belirtmeniz gerekir.
- Bir tarih saat biçimi için kültürü belirtebilirsiniz.
- Metin gösteriminde eksik bileşenlerin tarih ve saat olarak nasıl ayarlanacaktır?
ve Parse TryParse yöntemleri, bir tarih ve saat için birçok ortak temsili dönüştürür. ve ParseExact TryParseExact yöntemleri, tarih ve saat biçim dizesi tarafından belirtilen desene uygun bir dize gösterimini dönüştürür. (Ayrıntılar için standart tarih ve saat biçimi dizeleri ve özel tarih ve saat biçim dizeleri ile ilgili makalelere bakın.)
Geçerli DateTimeFormatInfo nesne, metnin tarih ve saat olarak nasıl yorumlanması gerektiği üzerinde daha fazla denetim sağlar. Bir özelliği DateTimeFormatInfo tarih ve saat ayırıcılarını, ayların, günlerin ve dönemlerin adlarını ve "AM" ve "PM" ifadelerinin biçimini açıklar. tarafından CultureInfo döndürülen, CultureInfo.CurrentCulture geçerli kültürü temsil eden CultureInfo.DateTimeFormat bir özelliğine sahiptir. Belirli bir kültür veya özel ayarlara sahip olmak için ayrıştırma IFormatProvider yönteminin parametresini belirtirsiniz. parametresi IFormatProvider için, bir CultureInfo kültürü veya nesneyi temsil eden bir nesnesi DateTimeFormatInfo belirtin.
Bir tarihi veya saati temsil eden metinde bazı bilgiler eksik olabilir. Örneğin, çoğu kişi "12 Mart" tarihini geçerli yılı temsil ettiğini varsayer. Benzer şekilde,"Mart 2018", 2018 yılındaki Mart ayıdır. Zamanı temsil eden metinler genellikle yalnızca saat, dakika ve AM/PM ataması içerir. Ayrıştırma yöntemleri, makul varsayılanları kullanarak bu eksik bilgileri ele almaktadır:
- Yalnızca saat mevcut olduğunda, tarih kısmı geçerli tarihi kullanır.
- Yalnızca tarih mevcutsa, saat kısmı gece yarısıdır.
- Yıl bir tarihte belirtilmezse geçerli yıl kullanılır.
- Ayın günü belirtilmedinde ayın ilk günü kullanılır.
Tarih dizede mevcutsa, ay ve gün veya yıllardan birini içermesi gerekir. Saat varsa saati ve dakikayı veya AM/PM atamayı içermesi gerekir.
Bu varsayılanları geçersiz NoCurrentDateDefault kılmak için sabiti belirtsiniz. Bu sabiti kullanırken eksik yıl, ay veya gün özellikleri değerine 1 ayarlanır. kullanarak son örnek bu davranışı Parse gösteriyor.
Tarih ve saat bileşenine ek olarak, bir tarih ve saat dizesi gösterimi, saat ile saat arasındaki farkı (UTC) gösteren bir Eşgüdümlü Evrensel Saat içerebilir. Örneğin, "14.02.2007 5:32:00 -7:00" dizesi UTC'den yedi saat önceki bir saati tanımlar. Bir uzaklığın bir zaman dize gösteriminden atlanırsa, ayrıştırma özelliği olarak DateTime ayarlanmış Kind bir nesne DateTimeKind.Unspecified döndürür. Uzaklık belirtilirse, ayrıştırma özelliği olarak ayarlanmış ve değeri makinenizin yerel saat dilimine ayarlanmış DateTime Kind bir nesne DateTimeKind.Local döndürür. Ayrıştırma yöntemiyle bir değer DateTimeStyles kullanarak bu davranışı değiştirebilirsiniz.
Biçim sağlayıcısı, belirsiz bir sayısal tarihi yorumlamak için de kullanılır. "02/03/04" dizesiyle temsil edilen tarihin hangi bileşenlerinin ay, gün ve yıl olduğu net değildir. Bileşenler, biçim sağlayıcısında benzer tarih biçimlerinin sırasına göre yorumlanır.
Ayrıştır
Aşağıdaki örnek, bir 'i içine DateTime.Parse dönüştürmek için yönteminin string kullanımını DateTime göstermektedir. Bu örnek, geçerli iş parçacığıyla ilişkili kültürü kullanır. Geçerli CultureInfo kültürle ilişkili giriş dizesini ayrıştıramazsa, FormatException bir atılan.
İpucu
Bu makaledeki tüm C# örnekleri tarayıcınızda çalışır. Çıkışı görmek için Çalıştır düğmesine basın. Ayrıca, deneme yapmak için bunları düzenleyebilirsiniz.
Not
Bu örnekler hem C# hem de GitHub için belge 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
Bir dizeyi ayrıştırarak biçimlendirme kuralları kullanılan kültürü de açıkça tanımlayabilirsiniz. özelliği tarafından döndürülen standart DateTimeFormatInfo nesnelerden birini CultureInfo.DateTimeFormat belirtirsiniz. Aşağıdaki örnek, bir Almanca dizesini bir içine ayrıştırmak için bir biçim sağlayıcısı DateTime kullanır. Kültürü temsil CultureInfo eden bir de-DE oluşturur. Bu CultureInfo nesne, bu dizenin başarılı bir şekilde ayrıştır yüzdesini sağlar. Bu, içinde hangi ayarın olduğunu CurrentCulture CurrentThread engeller.
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
Ancak, özel biçim sağlayıcılarını belirtmek için yönteminin aşırı yüklemelerini kullanabilirsiniz, ancak yöntemi standart olmayan biçimleri Parse ayrıştırmayı desteklemez. Standart olmayan biçimde ifade eden bir tarih ve saati ayrıştırmak için bunun yerine ParseExact yöntemini kullanın.
Aşağıdaki örnek, belirtilmeyen alanlar için geçerli tarih ve saat bilgisinin 'ye eklenmesi gerek olmadığını belirtmek DateTimeStyles DateTime için numaralama kullanır.
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
yöntemi, DateTime.ParseExact belirtilen dize desenlerinden DateTime biri ile uyumlu olan bir dizeyi nesnesine dönüştürür. Belirtilen formlardan biri olmayan bir dize bu yönteme geçiriliyorsa, FormatException bir oluşur. Standart tarih ve saat biçimi belirleyicilerinden birini veya özel biçim belirteci birleşimini belirtebilirsiniz. Özel biçim belirleyicilerini kullanarak özel bir tanıma dizesi oluşturabilirsiniz. Belirleyicilerin açıklaması için standart tarih ve saat biçimi dizeleri ile özel tarih ve saat biçimi dizeleri ile ilgili konulara bakın.
Aşağıdaki örnekte yöntemi ayrıştırmak için bir dize nesnesi, ardından bir biçim belirleyicisi DateTime.ParseExact ve ardından bir nesnesi CultureInfo geçirildi. Bu ParseExact yöntem yalnızca kültürde uzun tarih desenini takip alan dizeleri ayrıştır en-US olabilir.
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 '{0}'", 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
ve yöntemlerinin Parse her ParseExact aşırı yüklemesinde, IFormatProvider dizenin biçimlendirmesi hakkında kültüre özgü bilgiler sağlayan bir parametresi de vardır. Bu IFormatProvider nesne, CultureInfo standart bir kültürü veya özelliği tarafından döndürülen bir nesneyi temsil eden bir DateTimeFormatInfo CultureInfo.DateTimeFormat nesnedir. ParseExact ayrıca, bir veya daha fazla özel tarih ve saat biçimi tanımlayan ek bir dize veya dize dizisi bağımsız değişkeni kullanır.