更改DateTime.Parse()中的格式

时间:2012-11-14 10:16:52

标签: c#

在数据库中,日期保存格式如下:
 year-month-day hour:minute:second:msecond

在应用程序中,用户可以过滤网格,并在过滤器列中写下以下内容:
 08-11 - 这意味着11月8日。 我有以下代码:

var test = DateTime.Parse(filter.SearchingValue);
test变量中的

包含11.08.2012。但是,我想得到08.11.2012

3 个答案:

答案 0 :(得分:1)

您可以使用DateTime.ParseExact

string value = string.Format("{0}-{1}"
    , filter.SearchingValue
    , DateTime.Today.Year);
DateTime dt = DateTime.ParseExact(value, "dd-MM-yyyy", CultureInfo.InvariantCulture);
  

是的,但用户也可以按点分割日期:08.11。更多   例如:08.11.12,08.11,08-11,08-11-12。

也许有一些比较容易的东西,但这有效:

// sample input
var inputs = new string[] { "08.11.12", "08.11", "08-11", "08-11-12" };
// possible formats
var formats = new string[] { "dd-MM-yyyy", "dd.MM.yyyy" };
// try to parse all your sample data
for (int i = 0; i < inputs.Length; i++)
{
    string input = inputs[i];
    var tokens = input.Split(new[] { '-', '.' }, StringSplitOptions.RemoveEmptyEntries);
    if (tokens.Length == 2)
    {
        input = string.Format("{0}-{1}"
                , input
                , DateTime.Today.Year);
    }
    else if (tokens.Length == 3)
    {
        string year = tokens[2];
        if (year.Length != 4)
        { 
            year = string.Format("{0:20##}", int.Parse(year));
        }
        input = string.Format("{0}-{1}-{2}"
                , tokens[0]
                , tokens[1]
                , year);
    }
    else
        throw new ArgumentException("Invalid DateTime", "filter.SearchingValue");

    DateTime dt = DateTime.MinValue;
    foreach (string format in formats)
    {
        bool success = DateTime.TryParseExact(
            input
            , format
            , CultureInfo.InvariantCulture
            , DateTimeStyles.None
            , out dt);
        if (success) break;
    }
    Console.WriteLine(dt.ToString());
}

答案 1 :(得分:0)

var ftest = test.ToString("dd.MM.yyyy")

答案 2 :(得分:0)

您可以在web配置中的system.web中设置默认日期格式:

&LT; globalization uiCulture="en-GB" culture="en-GB" />