我从excel文件中读取2列:
一列有价值: 2012年7月11日
第二列有价值: 18:45
当我阅读第二列时,它实际上显示了它前面的默认日期。 dr [3] .ToString()“30/12/1899 6:45:00 PM”string
我想加入第二列的第一列。但是现在我有正常的输入格式异常
我尝试使用字符串操作
从第二列中删除日期部分这是我的代码
DateTime dateEvent = DateTime.Parse(dr[1].ToString());
dateEvent.Add(TimeSpan.Parse(dr[3].ToString().Substring(dr[3].ToString().IndexOf(" ")+1)));
Udpate 1:
DateTime dateEvent = DateTime.ParseExact(string.Format("{0} {1}", dr[1].ToString(), dr[3].ToString().IndexOf(" ") + 1), "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
答案 0 :(得分:1)
string date = dr[1].ToString();
string time = dr[3].ToString();
time = time.Substring(time.IndexOf(' ') + 1);
DateTime.ParseExact(string.Format("{0} {1}", date, time), "dd/MM/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);
答案 1 :(得分:1)
编辑:再看一遍,我强烈怀疑你根本不需要进行任何解析。我怀疑你可以使用:
DateTime date = ((DateTime) dr[1]).Date;
TimeSpan time = ((DateTime) dr[3]).TimeOfDay;
DateTime combined = date + time;
你不应该盲目地调用值ToString()
,而不要理解类型是什么:通常它是正确的类型,你可以节省一些可能有损的字符串转换。
假设您要进行解析(而不是让Excel为您转换为DateTime
),我建议对这两个部分使用DateTime.ParseExact
:
dd/MM/yyyy
dd/MM/yyyy hh:mm tt
我建议明确使用不变文化 - 假设你真的知道这种格式是完全修复的。 (如果你不这样做,那就是一个更大的问题。)
然后像这样加入他们:
DateTime combined = date.Date + time.TimeOfDay;
或者,您可以使用我的Noda Time库,该库具有单独的LocalDate
和LocalTime
概念,可以轻松组合到LocalDateTime
...
答案 2 :(得分:1)
我建议您使用DateTime.ParseExact,以便具体说出您需要的日期部分。
var date = DateTime.ParseExact(dr[1], "dd/MM/yyyy", CurrentCulture.InvariantCulture).Date;
var time = DateTime.ParseExact(dr[3], "HH:mm", CurrentCulture.InvariantCulture).TimeOfDay;
var eventDate = date + time;