Dizeden gizli karakterler kaldırılamıyor

Bir tarih saatini temsil eden bir dizeden gizli karakterleri kaldırmaya çalışıyorum. .Net Fiddle kullanıyorum ve ParseExact’in başarısız olmaya çalıştığını görebilirsiniz.

İşte bir pasajı. Lütfen çalışma kodu için keman bağlantısına bakın.

var dateTime = "2015-04-14 07:30:00 PM"; //<= this throws an error from some hidden char
    dateTime = Regex.Replace(dateTime, @"[^\w:\s-]", ""); 
    Console.WriteLine(dateTime);
    DateTime dateWithTime = DateTime.ParseExact(dateTime, "yyyy-MM-dd HH:mm:ss tt",
        CultureInfo.InvariantCulture);
    Console.WriteLine("OK");
1
unicode karakterleri yazdırma dotnetfiddle.net/enZv4B
katma yazar user1186050, kaynak
Dizenin üzerinde numaralandırıp karakterlerin unicode sayısını yazdırabilir misiniz, böylece bir karakter hangi sorunlara neden olduğunu inceleyebilir mi?
katma yazar Willem Van Onsem, kaynak
@AlexeiLevenkov: \ s bir [^] grubundadır, bu nedenle \ s ...
katma yazar Willem Van Onsem, kaynak
@AlexeiLevenkov: \ s bir [^] grubundadır, bu nedenle \ s ...
katma yazar Willem Van Onsem, kaynak

6 cevap

Biçim dizesindeki HH , PM zamanları için biçim dizesinde AM/PM kullanıldığında çalışmayan 24 saatlik saat anlamına gelir.

HH öğesini hh olarak değiştirin.

4
katma

Biçim dizesindeki HH , PM zamanları için biçim dizesinde AM/PM kullanıldığında çalışmayan 24 saatlik saat anlamına gelir.

HH öğesini hh olarak değiştirin.

4
katma

Görünmez bir karakter değil. HH kullanımınız, tt kullanımınızla çelişir. HH 24 saattir, ancak PM'i yorumlamak için tt kullanıyorsunuz (12 saat). hh olarak değiştirin ve çalışır.

var dateTime = "2015-04-14 07:30:00 PM"; 
//dateTime = Regex.Replace(dateTime, @"[^\w:\s-]", ""); <= not needed
Console.WriteLine(dateTime);
DateTime dateWithTime = DateTime.ParseExact(dateTime, "yyyy-MM-dd hh:mm:ss tt",
    CultureInfo.InvariantCulture);
Console.WriteLine("OK");
4
katma

Görünmez bir karakter değil. HH kullanımınız, tt kullanımınızla çelişir. HH 24 saattir, ancak PM'i yorumlamak için tt kullanıyorsunuz (12 saat). hh olarak değiştirin ve çalışır.

var dateTime = "2015-04-14 07:30:00 PM"; 
//dateTime = Regex.Replace(dateTime, @"[^\w:\s-]", ""); <= not needed
Console.WriteLine(dateTime);
DateTime dateWithTime = DateTime.ParseExact(dateTime, "yyyy-MM-dd hh:mm:ss tt",
    CultureInfo.InvariantCulture);
Console.WriteLine("OK");
4
katma

HH'yi ss değiştirmeniz gerekiyor.

yyyy-MM-dd hh:mm:ss tt
1
katma

HH'yi ss değiştirmeniz gerekiyor.

yyyy-MM-dd hh:mm:ss tt
1
katma