从2012,201201或20120101中解析来自int的DateTime

时间:2013-12-02 07:35:01

标签: c# datetime

我有三种类型的输入整数,表示不同的日期时间。

1)yyyy,例如2012

2)yyyyMM,例如201201

3)yyyyMMdd,例如20120101

我需要编写一个方法来解析它们到datetime。

public static DateTime ConvertToDateTime(int intDateTime)
{
    // How to do this
}

5 个答案:

答案 0 :(得分:3)

您可以在ParseExact方法中指定多种格式。

string[] formats = new string[] { "yyyyMMdd", "yyyyMM", "yyyy" };
string[] inputs = new string[] { "2012", "201201", "20120101" };

foreach (var s in inputs)
{
    Console.WriteLine(DateTime.ParseExact(s, formats, CultureInfo.InvariantCulture, DateTimeStyles.None));
}

public static DateTime ConvertToDateTime(int intDateTime)
{
    return DateTime.ParseExact(intDateTime.ToString(), formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
}

答案 1 :(得分:1)

这样的东西?

public static DateTime ConvertToDateTime(int intDateTime)
{
   DateTime dt = new DateTime();
   if (intDateTime.ToString().Length == 4)
   {
      dt = DateTime.ParseExact(intDateTime.ToString(), "yyyy", CultureInfo.InvariantCulture);
   }

   if (intDateTime.ToString().Length == 6)
   {
       dt = DateTime.ParseExact(intDateTime.ToString(), "yyyyMM", CultureInfo.InvariantCulture);
   }

   if (intDateTime.ToString().Length == 8)
   {
       dt = DateTime.ParseExact(intDateTime.ToString(), "yyyyMMdd", CultureInfo.InvariantCulture);
   }
   return dt;
}

使用DateTime.TryParseExact方法也很有用,因此您可以检查intDateTime转换是否成功。

答案 2 :(得分:0)

您的输入实际上应该是日期类型特定格式的字符串。我建议使用字符串或在输入值上调用.ToString()而不是使用整数。

然后使用DateTime.ParseExact(...)方法:

CultureInfo invariantCulture = CultureInfo.InvariantCulture;
int input = 201212;
string format = "yyyyMM";// change accordingly to your case
DateTime.ParseExact(input.ToString(invariantCulture), format, invariantCulture);  

您还可以查看DateTime.TryParseExact(...)方法。

答案 3 :(得分:0)

public static DateTime ConvertToDateTime(int intDateTime)
{
    return DateTime.ParseExact(intDateTime.ToString(CultureInfo.InvariantCulture)
        , new[] {"yyyy", "yyyyMM", "yyyyMMdd"} //insert custom formats into this array
        , CultureInfo.InvariantCulture
        , DateTimeStyles.None);
}

答案 4 :(得分:0)

对于初学者来说,你的输入类型有很多可能发生的错误,例如否定,或者大于9999的年份(还有很长的路要走,但是谁知道这个方法用于什么)

现在进入实际输入,您可以将输入从in转换为String,这允许您使用DateTime(int,int,int) - >创建DateTime。 (年,月,日),您还可以执行Substring(int,int)以检索多个值。

public static DateTime ConvertToDate(int intDateTime){
  DateTime dt = null;
  //Convert int to String
  String tempDate = intDateTime.toString();
  int year = 0;
  int month = 1;
  int day = 1;

  //Basic check if length = 4, set year. NOTE no validation that year is reasonable.
   if(tempDate.Length  == 4)
   {
      year = Convert.ToInt32(tempDate);
   }else if(tempDate.Length  == 6){
      year = Convert.ToInt32(tempDate.Substring(0,3);
      month = Convert.ToInt32(tempdate.Substring(4,5);
   }else if(tempDate.Length == 8){
      year = Convert.ToInt32(tempDate.Substring(0,3);
      month = Convert.ToInt32(tempdate.Substring(4,5);
      day = Convert.ToInt32(tempdate.Substring(6,7);
   }

   return dt = new DateTime(year, month, day);
}

但是,假设未提供月份和/或日期,则可以接受1月和1月。