我的日期时间是" 20170317 630" 这意味着2017年3月17日上午6:30
这是我正在尝试的代码块,但它失败了。
var str = "20170317 0630";
var formatedTime = "yyyyMMdd Hmm";
DateTime etaDate;
if (!DateTime.TryParseExact(str,formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None, out etaDate)) //formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None
{
Console.WriteLine("Date conversion failed " + etaDate);
}
Console.WriteLine("Date conversion passed "+etaDate);
传递:20170317 0630
失败:20170317 630
请帮助我。
答案 0 :(得分:4)
我并不完全惊讶它没有解析它 - 我怀疑它贪婪地解析了" 63"并认为这是一个无效的小时数。
我们有exactly the same problem in Noda Time - 我并不打算修复它。完成这项工作将是一项巨大的努力,并且很可能会降低更合理的格式的性能。
我强烈建议采用更合理的格式,例如:
之一H:mm
删除伪歧义HHmm
让一切更加清晰HH:mm
甚至更好,IMO - 最好使用连字符作为日期部分,所以yyyy-MM-dd HH:mm
您可以通过简单地检测字符串的长度从一种格式转换为另一种格式,因为它的每个其他部分都是固定长度。例如,要转到使用HHmm
,您可以执行以下操作:
if (str.Length == "yyyyMMdd Hmm".Length)
{
str = str.Insert("yyyyMMdd ".Length, "0");
}
然后使用yyyyMMdd HHmm
格式进行解析。如果 有效宽度的长度不正确,那么无论如何都无法解析。
答案 1 :(得分:0)
//split str in to strDate and strTime by using space
var strDate = "20170317"; //Date part
var strTime ="630"; //Time part
if(strTime.Length ==3) //check lenght of time part
{
strTime = "0" + strTime; //Add extra zero
}
var formatedTime = "yyyyMMdd HHmm";
DateTime etaDate;
if (!DateTime.TryParseExact(strDate + strTime,formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None, out etaDate)) //formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None
{
Console.WriteLine("Date conversion failed " + etaDate);
}
Console.WriteLine("Date conversion passed "+etaDate);
答案 2 :(得分:-2)
尝试:
var str = "20170317 0630";
var formatedTime = "yyyyMMdd HHmm";
DateTime etaDate;
if (!DateTime.TryParseExact(str,formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None, out etaDate)) //formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None
{
Console.WriteLine("Date conversion failed " + etaDate);
}
Console.WriteLine("Date conversion passed "+etaDate);