越野/地区日期时间格式

时间:2016-08-08 22:28:29

标签: c# datetime ssis

我正在为ssis包编写一个C#脚本,我在英国服务器上运行它,但我希望以yyyMMdd格式获取美国格式的日期时间。

但是当我执行datevariablename.ToString(" yyyyMMdd")时,它返回格式为yyyyddMM的字符串。我甚至尝试使用DateTime的Month,Day和Year方法,但它仍然给出了作为月份和月份作为日期的日期。

有谁知道如何以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");
        }

3 个答案:

答案 0 :(得分:1)

你试过这个吗?

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

dt.ToString("yyyyMMdd");

答案 1 :(得分: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"));

答案 2 :(得分:0)

所以还有一件事需要考虑。如果您查看SSMS或Excel中的日期或....它将使用您的计算机文化,因为datetime是一个对象而不是字符串,您的计算机设置告诉智能程序如何显示它。

所以如果Date1变量数据类型是date或datetime数据类型,你仍然会得到错误的格式。您可以将Date1 var更改为string以查看结果,或者您可以将结果转储到文本文件并在记事本或其他内容中打开。

乍一看,@ Ozan对于您更有效地设置格式有一个很好的答案。