从字符串DateTime中解析月份和日期

时间:2009-06-29 17:48:42

标签: c# datetime parsing

假设你有这种格式的字符串。

1月11日,“111” 11月1日,“1101” 10月13日,“1013” 等

所以基本上所有你想解析它并存储在两个变量的日期和月份。

我不需要解析代码,我可以很容易地做到这一点。 我只是想知道是否有人知道如何使用类似的东西来做到这一点 DateTime.TryParse()或类似的东西。

干杯

2 个答案:

答案 0 :(得分:5)

使用DateTime可能是这样的

string value = "111";
if (value.Length < 4) value = "0" + value;
DateTime dt;
if (DateTime.TryParseExact(value, "MMdd", 
     CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) {
    int month = dt.Month;
    int day = dt.Day;
}

但是说实话,你最好只是手动解析字符串。如果您希望将日期和月份分成两个单独的变量,那么您只需要使用不需要的DateTime来引入开销(尽可能小)。

int value = 111;
int month = value / 100;
int day = value % 100;

if (month > 12)
    throw new Exception("Invalid Month " + month.ToString());

if (day > DateTime.DaysInMonth(year, month))
    throw new Exception("Invalid Day " + day.ToString());

答案 1 :(得分:1)

您应该可以使用ParseExactTryParseExact

来实现这一目标

我认为你的例子不会起作用,它拒绝在1月11日解析111,将其视为10月1日。如果你在日期的两个部分都坚持使用两位数,那应该更清晰。

DateTime parsedDate;
if (DateTime.TryParseExact("0111", "MMdd", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out parsedDate))
{
    // do something with parsedDate.Month and parsedDate.Day
}