C# 更改DateTime.Parse()中的格式

C# 更改DateTime.Parse()中的格式,c#,C#,在数据库中,日期以以下格式保存: 年月日小时:分钟:秒:毫秒 在应用程序中,用户可以筛选网格,并在筛选列中写入以下内容: 08-11-是指11月8日。 我有以下代码: var test = DateTime.Parse(filter.SearchingValue); 在测试中变量包含11.08.2012。但是,我想获得08.11.2012您可以使用: var ftest = test.ToString("dd.MM.yyyy") 是的,但用户也可以按点08.11分割日期。更多 例如:08.1

在数据库中,日期以以下格式保存:
年月日小时:分钟:秒:毫秒

在应用程序中,用户可以筛选网格,并在筛选列中写入以下内容:
08-11
-是指11月8日。 我有以下代码:

var test = DateTime.Parse(filter.SearchingValue);
测试中
变量包含
11.08.2012
。但是,我想获得
08.11.2012

您可以使用:

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

是的,但用户也可以按点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());
}
//示例输入
var输入=新字符串[]{“08.11.12”、“08.11”、“08-11”、“08-11-12”};
//可能的格式
var formats=新字符串[]{“dd-MM-yyyy”,“dd.MM.yyyy”};
//尝试解析所有示例数据
for(int i=0;i
您可以在system.web中的web配置中设置默认日期格式:


使用
ParseExact
并提供一个模式。
11!=十月
在您的数据库中,您应该使用
日期时间
列来保存日期-如果您有保存日期的格式,则说明您做得不对。如果用户编写以下内容:
08-11-2012
。这只是筛选行。@user1260827:我不明白你最后的评论。如果用户还可以输入年份,则需要将字符串拆分为若干部分(例如通过
string.split('-')
)并检查其是否包含年份。是的,但用户也可以按点拆分日期:
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());
}