C#如何从Int ddmmyy转换为DateTime?

时间:2014-09-01 09:13:06

标签: c# .net wpf parsing datetime

好的,所以我将日期存储为ddmmyy或dmmyy格式的int,并且前导0被截断,例如10914或100914

在某些条件下,此值为0表示000000。

如何在不转换为字符串的情况下将其转换为DateTime(由于它可能为0)?是否有某种DateTime.Parse重载?

2 个答案:

答案 0 :(得分:6)

您可以使用整数除法和模函数来分解这三个部分,然后使用DateTime(int,int,int)构造函数来创建DateTime值。 您还需要在某些时候将年份改为完整的四位数年份。

这样的事情:

int year = (date % 100) + 2000;
int month = (date / 100) % 100;
int day = (date / 100000);
DateTime result = new DateTime(year, month, day);

答案 1 :(得分:0)

int UrInt = 000000;
GroupCollection groups = Regex.Match(UrInt.ToString(), @"^(?<DAY>[0-9]{1,2})(?<MONTH>[0-9]{2})(?<YEAR>[0-9]{2})$").Groups;
int month;
if (int.TryParse(groups["MONTH"].Value, out month) == false)
{
    month = 1;
}
int day;
if (int.TryParse(groups["DAY"].Value, out day) == false)
{
    day = 1;
}
int year;
string _tmp = groups["YEAR"].Value;
// If the year matches 80-99 it will be 19xx if the year matches 00-79 it will be 20xx
if (Regex.IsMatch(_tmp, @"^[8-9]{1}[0-9]{1}$"))
{
    _tmp = String.Join("", "19", _tmp);
    if (int.TryParse(_tmp, out year) == false)
    {
        year = 1979;
    }
}
else
{
    _tmp = String.Join("", "20", _tmp);
    if (int.TryParse(_tmp, out year) == false)
    {
        year = 1979;
    }
}

DateTime UrDateTime = new DateTime(year, month, day);

不是最好的方式,但我认为,这将匹配您的搜索字词。 ;)

你必须根据你的需要更正年份匹配@&#34; ^ [8-9] {1} [0-9] {1} $&#34;

说明:

^ =行开头

[8-9] {1} =匹配第一位数字8-9

[0-9] {1} =匹配2cnd数字0-9

$ =行结束

希望这有帮助。