2016-07-22 32 views
4

Ich verwende DateTime.Now.ToString("d", new CultureInfo("nl-NL")).DateTime.ToString ("d", cultureInfo) Ausgabe unterscheidet sich zwischen IIS und Konsole App

In einer lokalen IIS-Web-Anwendung, ist die Ausgabe korrekt:

22-7-2016 

In einer Konsolenanwendung wählt der Rahmen die internationale/invariante Kultur Notation Datum:

2016-07-22 

Dies ist auf die gleiche Maschine, mit dem exakt gleichen Code. Ich habe einen Haltepunkt platziert, alle Eingaben überprüft und sogar versucht, die Befehle im unmittelbaren Fenster an diesem Punkt auszuführen. In jeder Situation wird die Konsolenanwendung falsch angezeigt.

Kann jemand erklären, was den Unterschied verursacht?

+1

Können Sie den vollständigen Code Ihrer Konsolenanwendung, die dies tut, einbeziehen, damit wir bestätigen können, dass wir den gleichen Code wie Sie in unseren Tests ausführen? Mein kurzer Test zeigt keine Probleme ... – Chris

+0

Was ist DateTime? Die System.DateTime-Klasse verfügt nicht über eine statische ToString-Methode, sodass der von Ihnen angegebene Code erst kompiliert wird, wenn Sie eine Variable namens DateTime oder eine ToString-Erweiterungsmethode erstellt haben. –

+1

'neue CultureInfo (" nl-NL ", falsch)' – PetSerAl

Antwort

3

IIS und Ihre Konsolenanwendung werden unter verschiedenen Benutzerkonten ausgeführt. Wenn Sie das Datumsformat angepasst haben (z. B. über das Kontrollfeld "Region"), verwendet der Formatierer CultureInfo diese Anpassung nur in Ihrem Konto.

Sie können eine CultureInfo erstellen, die Benutzereinstellungen ignoriert:

new CultureInfo("nl-NL", useUserOverride: false) 

Sie setzen die Region Einstellungen für Ihr Konto: Ausführen>intl.cpl> die NL locale Wählen Sie im Drop-down> Weitere Einstellungen> Zurücksetzen.

+0

@ SonerGönül Wie ich in meiner Antwort sagte, ist 'CultureInfo' von Windows-Einstellungen betroffen, es ist nicht absolut. Versuch es selber. –

+0

Um die Dinge klar zu machen - ich wollte nicht, dass ich das Gebietsschema ändere - meinte ich, das tatsächliche Format eines bestimmten Gebiets zu ändern. Es ist dort in der Systemsteuerung. –

+0

@ SonerGönül Diese Einstellungen gelten für jedes Konto. Das ist die einzige Option, die mir einfällt. –

-1

I erhielt gleiche Ergebnisse sowohl Konsole und Web-Anwendung mit .NET 4.5 in VS 2012.

Sie dies versuchen könnten?

yourDateTime.ToString("dd-MM-yyyy", new System.Globalization.CultureInfo("nl-NL")); 
+1

Die Verwendung einer expliziten Formatzeichenfolge schlägt den Zweck der Verwendung von "d". – CodeCaster

+1

Nur zu Testzwecken. Ich sagte "Kannst du es versuchen ...", um zu sehen, was passiert und das Problem identifizieren. –

+0

Das ist in Ordnung, aber das ist keine Antwort und beweist nichts. – CodeCaster