2017-10-12 2 views
2

In UWP, Formatierung ein Datum als Zeichenfolge longdate wie diesesC# DateTime.Parse (longdate) wirft Ausnahme

string myDateString = new DateTimeFormatter("longdate").Format(DateTime.Today); 

ergibt myDateString = "‎Thursday‎, ‎12‎ ‎October‎ ‎2017"

Der Versuch, es zu konvertieren zurück, wie diese

DateTime myDate = DateTime.Parse(myDateString, CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal); 

wirft System.FormatException

Versuchen, es zurück zu konvertieren wie diese

DateTime myDate = DateTime.ParseExact(myDateString, "longdate", CultureInfo.CurrentCulture); 

Auch System.FormatException

wirft ich meine Maschine US dann. Der Wert von myDateString = "‎Thursday‎, ‎October‎ 12‎ ‎‎2017"

aber wenn ich es versuche, es zurück zu einem Datum zu konvertieren, wirft dies auch eine System.FormatException.

Wie sollte ich eine lange Datumszeichenfolge in C# mithilfe der aktuellen Kultur in ein Datetime konvertieren?

+0

was ist Ihr lange Datumsformat? mm/TT/JJJJ? Holen Sie sich die Datetime, DateTime d = DateTime.Now; dann wandle es in ein beliebiges Format um, string s = d.ToString ("TT/MM/JJJJ-HH: mm: ss.fff"); – JohnChris

+2

Das 'DateTime.ParseExact' verwendet kein' DateTimeFormatter', daher glaube ich nicht, dass es das Format von 'DateTimeFormatter (" longdate ") kennt. – EpicKip

+1

Ich nehme an, das ist UWP? Wenn ja, würde ich vorschlagen, es so zu markieren. Geben Sie zusätzlich den tatsächlichen Wert an, den Sie für "myDateString" erhalten. –

Antwort

-1

einige Datetime-Formate lesen über ... DateTime Formats

Stapel Post, die verwandt ist: here

Basics auf Datumzeit: basics

Beispiel auf DateTime with culture

Ein einfaches Beispiel mit:

DateTime d = DateTime.Now; 
DateTime ut = d.ToUniversalTime(); 
// Defines a custom string format to display the DateTime value. 
// zzzz specifies the full time zone offset. 
    String format = "MM/dd/yyyy hh:mm:sszzz"; 

String utcstr = utcdt.ToString(format); 
     Console.WriteLine(utcstr); 

Edit: Kleine Konsole app Beispiel

static void Main(string[] args) 
     { 
      string myDateString = "Thursday, 12 October 2017"; 
      //Why use the above just get a new one for today in the correct format 
      //Or create your own converter 
      DateTime date = DateTime.Now; 

      CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; 
      //or 
      var culture = System.Globalization.CultureInfo.CurrentCulture; 

      string test = currentCulture.ToString(); 

      Console.WriteLine(date.ToString(CultureInfo.GetCultureInfo(test))); 
      Console.ReadLine(); 
     } 
+0

Vielen Dank für den Vorschlag @JohnChris, aber wir können kein Datumsformat wie dieses angeben, da wir die Kultur des verwenden müssen Benutzer Maschine. – Vague

+0

@Vague Ich habe einige Änderungen an der Kultur vorgenommen, die Sie ausprobieren können – JohnChris

+0

Nochmals vielen Dank @JohnChris, aber wir verwenden nicht UTC. Wir nutzen die Kultur der lokalen Maschine ... wo auch immer das sein mag. – Vague

0
string sd = "‎Thursday‎,‎ ‎October‎ 12, ‎2017"; 
sd = DateTime.Now.ToString("dddd, MMMM dd, yyyy", new CultureInfo("en-US")); 
DateTime myDate; 
if (DateTime.TryParseExact(sd,"dddd, MMMM dd, yyyy", new CultureInfo("en-US"), DateTimeStyles.None, out myDate)) 
{ 
    Console.WriteLine(myDate); //if format accepted. 
} 
+0

erstellt wurde. Ihre Lösung ist nicht kulturunabhängig. Verweise auf die obigen Kommentare. Es scheint, dass dies ein UWP-Problem ist. – Vague

+0

ja, wenn Sie CultureInfo wie neue CultureInfo ((int) CultureTypes.AllCultures) verwenden, dann ist es egal, welche Kultur ist. – deniz

0

@Jay Zuo in Cannot convert string to DateTime in uwp erklärt

wenn wir DateTimeFormatter.Format Methode, gibt es einige unsichtbar 8206 Zeichen in seiner Rückkehr verwenden Wert.

So wie @Corak vorgeschlagen, verwenden Sie nicht DateTimeFormatter, verwenden ToString("D")