2016-08-08 1 views
0

私はssisパッケージ用のC#スクリプトを作成しています。私は英国のサーバーでそれを実行していますが、yyyMMddの形式で米国の形式でdatetimeを取得します。クロスカントリー/リージョンDateTime Formating

私はdatevariablename.ToString( "yyyyMMdd")を実行すると、yyyyddMMという形式の文字列を返します。私はDateTimeの月、日、年のメソッドを使ってみましたが、それでも私には月と日を月として与えてくれます。

yyyyMMddの形式で返される文字列をどのように取得できるか誰にも分かりますか?以下は私のコードのスニペットです:

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

「DateTime.ParseExact」を使用 –

+1

M/dとd/M形式の混合リストを入力すると、最初に見つかったものと一致することになります。毎月12日間違いやすい可能性があります。 – Plutonix

+0

@Plutonix goodポイントは、リストが希望の優先順位で注文されている限り、それはまだ有効であることがわかります。月と日が同じ場合、最終的には誰もあなたには1/1/2016対1/1/2016(MM/dd/yyyyとdd/MM/yyyy)は分かりません:) – Matt

答えて

1

あなたはこれを試したことがありますか?

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

dt.ToString("yyyyMMdd"); 
+0

これは完璧でした。私が変更しなければならなかったのは、日付形式を「dd/MM/yyyy hh:mm:ss」に変更したことだけでした。あなたが使った "ddMMyyyy"は、私が走ったときに失敗しました。そうでなければそれは働いた。 – SilverBackApe

0

DateTime.ParseExact方法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 
} 

またはさらに簡単See the Demo

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

ので、考慮すべきもう一つのことがあります。 SSMSやExcelなどで日付を見ると、datetimeは文字列ではないオブジェクトなので、コンピューターの設定はインテリジェントなプログラムに表示するため、コンピューターの文化を使用します。

したがって、Date1変数のデータ型がdateまたはdatetimeのデータ型の場合、間違った形式を取得します。 Date1 varを文字列に変更して結果を確認したり、結果をテキストファイルにダンプしてメモ帳などで開くことができます。

@Ozanのように見えますが、より効率的にフォーマットを設定することができます。