28

我正在使用.NET framework v 3.5,我需要将表示时间跨度的字符串解析为TimeSpan对象。

问题是使用分隔符而不是冒号...例如13.00,或22.30

所以我想知道我是否必须替换.:有更干净的方法来获得它。

4

6 回答 6

48

解析DateTime并使用它的TimeOfDay属性,它是一个TimeSpan结构:

string s = "17.34";
var ts = DateTime.ParseExact(s, "HH.mm", CultureInfo.InvariantCulture).TimeOfDay;
于 2012-09-19T11:06:13.997 回答
10

更新的答案:

不幸的是,.NET 3 不允许使用自定义TimeSpan格式,因此您只能手动执行某些操作。我会按照您的建议进行替换。

原始答案(仅适用于 .NET 4+):

使用TimeSpan.ParseExact,指定自定义格式字符串

var timeSpan = TimeSpan.ParseExact("11.35", "mm'.'ss", null);
于 2012-09-19T11:03:41.767 回答
4
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);
于 2012-09-19T11:03:19.783 回答
2

对于.Net 3.5,您可以使用 DateTime.ParseExact 并使用TimeOfDay属性

string timestring = "12.30";
TimeSpan ts = DateTime.ParseExact(
                                  timestring, 
                                  "HH.mm", 
                                  CultureInfo.InvariantCulture
                                  ).TimeOfDay;
于 2012-09-19T11:12:29.147 回答
2

如果 TimeSpan 格式是像这样“9:00 AM”的十二小时时间格式,那么使用带有格式字符串“h:mm tt”的 TimeSpan.ParseExact 方法,像这样

TimeSpan ts = DateTime.ParseExact("9:00 AM", "h:mm tt", CultureInfo.InvariantCulture).TimeOfDay;

谢谢。

于 2018-10-01T16:11:50.780 回答
0

试试这个(它对我有用):

DateTime dt = Convert.ToDateTime(txtStartDate.Text).Add(DateTime.ParseExact(ddlStartTime.SelectedValue, "HH.mm", CultureInfo.InvariantCulture).TimeOfDay);

startdate 将是一个类似于 28/02/2018 的字符串,而 ddlstarttime 是 HH 格式,例如 13.00

于 2018-02-02T11:11:15.110 回答