2016-08-08 32 views
0

Ich schreibe ein C# -Skript für ein SSIS-Paket und ich führe es auf einem UK-Server, aber ich möchte eine Datetime im US-Format im Format yyyMMdd bekommen.Cross Country/Region DateTime Formatierung

Aber wenn ich datevariablenname.ToString ("yyyyMMdd"), gibt es eine Zeichenfolge im Format YyyyddMM. Ich habe sogar versucht, indem ich die Monats-, Tages- und Jahresmethoden von DateTime benutzte, aber es gibt immer noch den Tag als Monat und den Monat als Tag.

Weiß jemand, wie ich die Zeichenfolge im Format JJJJMMTD zurückgegeben bekommen kann? Unten ist ein Ausschnitt meines Codes:

private static readonly string[] dateFormat = { "M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", 
                "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", 
                "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", 
                "M/d/yyyy h:mm", "M/d/yyyy h:mm", 
                "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm", 
                "d/M/yyyy h:mm:ss tt", "d/M/yyyy h:mm tt", 
                "dd/MM/yyyy hh:mm:ss", "d/M/yyyy h:mm:ss", 
                "d/M/yyyy hh:mm tt", "d/M/yyyy hh tt", 
                "d/M/yyyy h:mm", "d/M/yyyy h:mm", 
                "dd/MM/yyyy hh:mm", "dd/M/yyyy hh:mm"   
                }; 

    public void Main() 
    { 
     // TODO: Add your code here 
     Dts.TaskResult = (int)ScriptResults.Success; 

     var date = DateTime.Now; 
     var date2 = DateTime.Now; 

     var inputDate = Dts.Variables[dateUnformated].Value; 

     if (DateTime.TryParseExact(inputDate.ToString(), dateFormat, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out date)) 
     { 
      var yyyymmdd = date.Year.ToString() + date.Month.ToString("0#") + date.Day.ToString("0#"); 

      Dts.Variables[Date1].Value = yyyymmdd; 

      Dts.Variables[Date2].Value = date.ToString("yyyyMMdd"); 
     } 
+0

Verwenden Sie 'DateTime.ParseExact' –

+1

Füttern Sie es eine gemischte Liste von M/d und d/M-Formate wie das bedeutet, dass es die erste findet es findet, die leicht falsch sein kann 12 Tage im Monat – Plutonix

+0

@Plutonix gut Punkt, ich sehe es immer noch gültig, solange die Liste in der gewünschten Reihenfolge angeordnet ist. Denn schließlich kann Ihnen niemand sagen, 1/1/2016 vs 1/1/2016 (MM/TT/JJJJ vs TT/MM/JJJJ), wenn der Monat und der Tag identisch sind :) – Matt

Antwort

1

Haben Sie das jemals versucht?

DateTime dt = DateTime.ParseExact(dateString, "ddMMyyyy", CultureInfo.InvariantCulture); 

dt.ToString("yyyyMMdd"); 
+0

Perfekt funktioniert das, das einzige was ich ändern musste war das Datumsformat "TT/MM/JJJJ hh: mm: ss". Das "ddMMyyyy", das du benutzt hast, ist fehlgeschlagen, als ich gelaufen bin. Sonst hat es geklappt. – SilverBackApe

0

Versuchen Sie es mit der DateTime.ParseExact Methode Implementierung See the Demo:

string strDate = "09-Aug-2016"; 
DateTime datDate; 
if (DateTime.TryParseExact(strDate, new string[] 
{ 
"dd-MMM-yyyy" 
} 

, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out datDate)) 
{ 
    Console.WriteLine(datDate.ToString("yyyy/MM/dd")); 
} 
else 
{ 
    //Error in datetime format 
} 

oder noch einfacher See the Demo:

DateTime datetime = DateTime.Now; 
Console.WriteLine(datetime.ToString("yyyy/MM/dd")); 
0

so es eine weitere Sache zu prüfen ist. Wenn Sie sich ein Datum in SSMS oder Excel oder .... ansehen, wird die Kultur Ihres Computers verwendet, da datetime ein Objekt und keine Zeichenfolge ist und Ihre Computereinstellungen den intelligenten Programmen mitteilen, wie sie angezeigt werden sollen.

Wenn der variable Datentyp Date1 der Datentyp date oder datetime ist, erhalten Sie immer noch das falsche Format. Sie können Date1 var in string ändern, um zu sehen, was das Ergebnis ist, oder Sie können Ihre Ergebnisse in eine Textdatei ablegen und im Editor oder etwas öffnen.

Der erste Blick scheint so, als hätte @Ozan eine gute Antwort darauf, wie Sie das Format effizienter einstellen können.