我有三种类型的输入整数,表示不同的日期时间。
1)yyyy,例如2012
2)yyyyMM,例如201201
3)yyyyMMdd,例如20120101
我需要编写一个方法来解析它们到datetime。
public static DateTime ConvertToDateTime(int intDateTime)
{
// How to do this
}
答案 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月。