【问题标题】:TimeSpan conversion from Custom Strings自定义字符串的 TimeSpan 转换
【发布时间】:2013-07-12 17:33:41
【问题描述】:

我的页面上有一个自定义控件,其中包含小时、分钟和上午/下午字段。我需要能够获取每个字符串 Hour + Minutes + AM/PM 并获得有效的 TimeSpan,以便我可以与 Date 结合。

我尝试了几种不同的方法,但得到了 Invalid TimeSpan 错误。这是我的代码

 string date = DateDropDown.SelectedValue;
 string hour = HourDropDown.SelectedValue;
 string minute = MinuteDropDown.SelectedValue;
 string timeofDay = AMPMDropDown.SelectedValue;

 string timeStr = hour.PadLeft(2, '0') + ":" + minute + timeofDay;

 TimeSpan custTime = TimeSpan.Parse(timeStr);
 DateTime custDate = DateTime.Parse(date);
 DateTime callBackDT = custDate.Add(custTime);

除了考虑 Parse 的错误。如何从时间字符串和上午/下午获得有效的时间跨度?

谢谢

【问题讨论】:

  • 最终的字符串会是什么样子?
  • 请记住,TimeSpan 用于表示测量的持续时间。它可以超过一天,也可以是负数。 DateTime.TimeOfDay 使用 TimeSpan 类型很有趣,因为这不是它的本意。但是,嘿,这只是 .Net 和 DateTime 诡异的冰山一角。

标签: c# datetime


【解决方案1】:

只需解析一次DateTime,最后:

string date = DateDropDown.SelectedValue;
string hour = HourDropDown.SelectedValue;
string minute = MinuteDropDown.SelectedValue;
string timeofDay = AMPMDropDown.SelectedValue;

string dateStr = date + " " + hour.PadLeft(2, '0') + ":" + minute + " " + timeofDay;

DateTime callBackDT = DateTime.Parse(dateStr);

在这种情况下没有理由构建TimeSpan,因为DateTime.Parse 可以将日期与时间作为单个DateTime 处理。

【讨论】:

  • 我显然试图将其复杂化。感谢您解开我的想法!
【解决方案2】:

如果您不必使用TimeSpan,只需使用DateTime.Parse 解析整个字符串即可:

var timeStr = string.Format("{0} {1}:{2} {3}", date, hour.PadLeft(2, '0'), minute, timeofDay);
var callBackDT = DateTime.Parse(timeStr, CultureInfo.CreateSpecificCulture("en-US"));
// Or whatever culture your string will be formatted with

【讨论】:

    【解决方案3】:

    TimeSpan 对象没有上午/下午的概念。您必须改用DateTime

    string timeStr = hour.PadLeft(2, '0') + ":" + minute.PadLeft(2, '0') + " " + timeofDay;
    DateTime custDate = DateTime.ParseExact("HH:mm t", timeStr, null);
    TimeSpan custTime = custDate.TimeOfDay;
    

    进一步阅读

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      相关资源
      最近更新 更多