2013-06-04 18 views
5

UPDATE Dies scheint ein Fehler in Windows 7 zu sein. Ich habe das gleiche Szenario mit Windows 8 getestet und ich kann das dort nicht replizieren. Bitte beachten Sie die MS Bug Report, die ich zu diesem Thema veröffentlicht habe, wenn Sie weitere Informationen wünschen. Danke nochmal an alle die geholfen haben.C Sharp DateTime Format

UPDATE 2 Der Fehler auf dem Server geschieht 2008 R2 als auch (Art erwartet, dass)

Original-Submission

die Beispiele auf der folgenden Seite Mit Date Formats ich in der Lage bin, das Format zu steuern meines Datums. Einer meiner Clients, der Windows 7 verwendet, hat jedoch seinen Kalender so geändert, dass er sein kurzes Datum wie dieses "TT/MM/TT/JJ" anzeigt, siehe das Bild für die Einstellungen. Short Date Format.

Dies zeigt die Uhr wie folgt enter image description here.

Das funktioniert gut, außer wenn ich ein Datum auf ihrem Computer verwende. Als ich formatiert das Datum wie die folgenden ...

String.Format("{0:MM/dd/yy}", dt); //the result is 06 04 13, notice the spaces 

Wenn ich die ddd nehmen Sie den Tag der Woche in den Kalendereinstellungen anzuzeigen und das gleiche Format-Option verwenden ich folgendes sehen ...

String.Format("{0:MM/dd/yy}", dt); //the result is 06/04/13, this time it has forward slashes 

Die Option .ToShortDateString() am Datum gibt mir "Di 06/04/13" und stürzt ab, wenn Sie in eine Datenbank gehen. So wurde das Problem gefunden.

Außerhalb der harten Codierung des Formats, d. H. Beitritt des Monats mit dem Schrägstrich zum Tag usw., weiß jemand, was ich sonst noch versuchen kann, um dies zu arbeiten?

+4

Es klingt wie Sie das Datum als eine Zeichenfolge formatieren, um es über einige SQL zu senden. Haben Sie darüber nachgedacht, anstelle von Stringformatierung Befehlsparameter zu verwenden? –

+0

+1 zu Michaels Kommentar. Sofern nicht eine Textdarstellung Ihr Endziel ist, sollten Sie String-Konvertierungen vermeiden. –

+0

Ja, das ist eine ziemlich alte App. Es hat eine SQL-Zeichenfolge, die gerade übergeben wird. Ich hatte gehofft zu vermeiden, in Befehlsparameter zu konvertieren und warten, bis ich dies in EF konvertieren konnte. Das hört sich nach einer sehr guten Idee an. Ich werde es versuchen. – JabberwockyDecompiler

Antwort

3

Es klingt wie Sie das Datum als String, um sie zu senden in über einige SQL formatieren. Haben Sie darüber nachgedacht, anstelle von Stringformatierung Befehlsparameter zu verwenden?

2

editierenden Hinweis: hierbei um ein Problem mit Windows 7 sein, sieht Beim Ändern des kurzen Datumsmuster über das Bedienfeld, wie die „weitere Einstellungen“ Reiter in der Zeit nach der OP, sowohl die Current und CurrentUICulture Datum des Separator wird ebenfalls geändert.

Wenn Sie das kurze Datumsformat ändern, sieht es so aus, als ob das erste Nichtformatzeichen als Datumtrennzeichen für die aktuelle Kultur verwendet wird. Sowohl CurrentCulture als auch CUrentUiCulture werden geändert, um diese [unbeabsichtigte] Anpassung widerzuspiegeln. Sieht aus wie ein [heller] Entwickler die [ungerechtfertigte] Annahme machte, dass niemand jemals ein kurzes Datumsformat haben würde, das etwas wie den Tag der Woche enthielt.

Schöner Fang! Werden Sie den Fehler an Microsoft melden?

Wenn Sie die invariante Kultur zum Formatieren von Daten usw. verwenden, wirken sich Benutzereinstellungen nicht auf Sie aus. Probieren Sie etwas wie

String.Format(CultureInfo.InvariantCulture , "{0:MM/dd/yy}", dt); 

oder verwenden Sie eine Instanz der Kultur Sie wollen:

CultureInfo usa = CultureInfo.GetCultureINfo("en-US") ; 
string.Format(usa , "{0:MM/dd/yy}" , dt) ; 

Wenn jedoch die Kultur Sie die aktuelle Kultur für das Windows-Betriebssystem Satz passt angegeben, Benutzeranpassungen angewendet werden: Bedeutung , haben Sie das gleiche Problem, es sei denn, Sie verwenden eine Kultur, die nicht die aktuelle Windows-Kultur ist.

Weitere Details unter MDSN:

Ohne eine spezifische Kultur zu spezifizieren, werden Sie der aktuelle Benutzer erhalten die CurrentCulture oder CurrentUICulture mit jedem benutzer- angegebene Mods wurden darauf angewendet.

+0

Vielen Dank für Ihren Kommentar, leider hat das Kulturformat das Problem auch nicht gelöst. Ich habe erwartet, dass das auch die Lösung wäre, aber ich denke, dass der Platz in den Einstellungen nach der DDD den Separator in ein Leerzeichen (ähnlich wie in Europa, das sie verwenden. Für ein Trennzeichen) tritt. Es wurde korrekt formatiert, aber die Leerzeichen sind immer noch vorhanden. – JabberwockyDecompiler

+0

@ Gouber80. Interessant. Ich müsste das einen Windows 7 Bug nennen. Siehe meine geänderte Antwort. Das Problem tritt nicht auf, wenn Sie InvariantCulture verwenden (nur aktiviert). –

+0

Ich würde zustimmen, sollte es mit der CurrentCulture behoben worden sein - wenn Sie die Antwort von Crash sehen, bemerkte er auch, dass es nicht mit der InvariantCulture angezeigt wird. Ich denke, dass ich das auf die Win 7 Foren setzen werde. Es ist eine Weile her, seit ich etwas gefunden habe, könnte ein potenzielles Windows-Problem sein;). – JabberwockyDecompiler

2

Die Verwendung der InvariantCulture sollte funktionieren. Ich habe eine Testkonsole App erstellt, um es zu überprüfen. Der Code ändert die aktuelle Kultur des Threads die unveränderliche zu sein:

class Program 
{ 
    static void Main(string[] args) 
    { 
      /// Displays '06 04 13' 

     Console.WriteLine(string.Format("{0:MM/dd/yy}", System.DateTime.Now)); 

     System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture; 

      /// Displays '06/04/13' 

     Console.WriteLine(string.Format("{0:MM/dd/yy}", System.DateTime.Now)); 

     Console.ReadLine(); 
    } 
} 
+0

Ich habe einen Test gemacht und es funktioniert. Ich habe es aufgewertet, weil Sie geantwortet haben, wonach ich gefragt habe, da Michaels Kommentar zu einer angemesseneren Lösung geworden ist. Ich warte darauf, ob er es als Antwort posten wird. Ich werde ihn bis morgen geben. Dann werde ich deine als die Antwort markieren. – JabberwockyDecompiler

+0

BTW, das sieht komplett wie ein Microsoft-Bug aus. Das Datum sollte mit Schrägstrichen angezeigt werden, auch wenn das kurze Datumsformat in Windows auf "TTM MM/TT/JJ" eingestellt ist. Ich habe die Windows-Einstellung auf 'DDD MM/TT/JJJJ' verlassen, da es in der Windows-Taskleiste gut aussieht. Aber ich bemerkte, dass Outlook die Daten ohne die Schrägstriche zeigte (dasselbe Problem wie bei Ihnen.) Vielleicht sollten Sie es an Microsoft melden. – crash

+0

Ja, andere haben das auch erwähnt. Bitte beachten Sie den Link in meiner Antwort, ich habe dies in den MS-Foren veröffentlicht, wenn Sie daran interessiert sind, zu folgen. – JabberwockyDecompiler

1

Für diejenigen, die an weiteren Informationen zu diesem Thema interessiert sind, gehen Sie bitte zum MS Forums Post, den ich HERE.