【发布时间】:2012-09-19 10:59:39
【问题描述】:
我正在使用 .NET framework v 3.5,我需要将表示时间跨度的字符串解析为 TimeSpan 对象。
问题是使用点分隔符而不是冒号...例如13.00,或22.30
所以我想知道是否必须将 . 替换为 : 或者有更干净的方法来获得它。
【问题讨论】:
标签: c# .net string parsing time
我正在使用 .NET framework v 3.5,我需要将表示时间跨度的字符串解析为 TimeSpan 对象。
问题是使用点分隔符而不是冒号...例如13.00,或22.30
所以我想知道是否必须将 . 替换为 : 或者有更干净的方法来获得它。
【问题讨论】:
标签: c# .net string parsing time
解析出DateTime 并使用它的TimeOfDay 属性,这是一个TimeSpan 结构:
string s = "17.34";
var ts = DateTime.ParseExact(s, "HH.mm", CultureInfo.InvariantCulture).TimeOfDay;
【讨论】:
如果 TimeSpan 格式是像这样“9:00 AM”的十二小时时间格式,那么使用带有格式字符串“h:mm tt”的 TimeSpan.ParseExact 方法,像这样
TimeSpan ts = DateTime.ParseExact("9:00 AM", "h:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
谢谢。
【讨论】:
string YourString = "01.35";
var hours = Int32.Parse(YourString.Split('.')[0]);
var minutes = Int32.Parse(YourString.Split('.')[1]);
var ts = new TimeSpan(hours, minutes, 0);
【讨论】:
更新答案:
不幸的是,.NET 3 不允许使用自定义 TimeSpan 格式,因此您只能手动执行某些操作。我会按照您的建议进行替换。
原始答案(仅适用于 .NET 4+):
使用TimeSpan.ParseExact,指定custom format string:
var timeSpan = TimeSpan.ParseExact("11.35", "mm'.'ss", null);
【讨论】:
3.5 中没有ParseExact :( !!
\.转义.不是更好吗?
对于 .Net 3.5,您可以使用 DateTime.ParseExact 并使用 TimeOfDay 属性
string timestring = "12.30";
TimeSpan ts = DateTime.ParseExact(
timestring,
"HH.mm",
CultureInfo.InvariantCulture
).TimeOfDay;
【讨论】:
试试这个(它对我有用):
DateTime dt = Convert.ToDateTime(txtStartDate.Text).Add(DateTime.ParseExact(ddlStartTime.SelectedValue, "HH.mm", CultureInfo.InvariantCulture).TimeOfDay);
startdate 将是一个字符串,如 28/02/2018,ddlstarttime 为 HH 格式,如 13.00
【讨论】: