0

我有一个可为空的变量Start time

Timespan? st=e.StartTime;//Null-able variable;

我正在尝试以AM/PM格式获取时间,但我无法得到它。

DateTime date = Convert.ToDateTime(st.ToString());
String f = String.Format("{0:hh:mm:tt}", date);

错误是:

 System.FormatException: String was not recognized as a valid DateTime.
4

5 回答 5

1

如果你要输出 的结果st.ToString(),你会发现它不包含任何日期信息,只有小时、分钟和秒。

这不是 DateTime 的有效格式,通常包含日期和时间信息。

您无需将 TimeSpan 转换为 DateTime 即可对其进行格式化,您只需使用TimeSpan.ToString()

string f = st.Value.ToString(@"hh\:mm\:tt");

供参考:http: //msdn.microsoft.com/en-us/library/ee372287.aspx

另外,请注意, 如果要\:输出中包含文字字符串,则必须执行此操作,如该文档页面底部所述。

于 2013-06-27T10:51:41.987 回答
0

将时间跨度转换为日期是不可能的,时间跨度表示 x 分钟/小时/任何数量,您无法仅从中获得确切的日期。如果您有一个日期作为起点,您可以添加一个时间跨度,这将为您提供新的日期。

于 2013-06-27T10:51:25.757 回答
0

st.ToString()将返回"System.Nullable<Timespan>",因为这是可空类型返回的内容 - 它不会覆盖默认的 Object.ToString 实现,因此返回类型名称。

如果你想要实际时间跨度的字符串,那么你需要这样做st.Value.ToString(),但你应该首先检查 null (即st.HasValue == true

编辑:另请参阅@Sean关于如何在不先转换为 DateTime 的情况下输出时间跨度的评论。

编辑:原来我有点错 - st.ToString() 没有返回上述内容。所以看看肖恩的回答。

于 2013-06-27T10:51:52.907 回答
0

首先通过将 TimeSpan 添加到 00:00 小时的基准日期将 Timespan 转换为 Datetime。然后在那个 dateTime 导出 12 小时格式。

DateTime.Now.Date.Add(OpenTimeSpan).ToString(@"hh\:mm\:tt")
于 2014-08-24T16:14:40.157 回答
0

接受的答案是错误的。
您不能为 TimeSpan 返回 AM/PM,因为它只关心时间的长度
    而不是一天中的时间 - 命名为“ TimeSpan ”。
在转换为字符串之前先转换为 DateTime:

string sTimeOfDay = new DateTime().Add(st).ToString("hh:mm tt");

注意:如果您的 TimeSpan 可以为空,那么您需要添加条件逻辑来处理 Nulls 并传入ts.Value而不是ts

string sTimeOfDay = (st == null ? null : new DateTime().Add(st.value).ToString("hh:mm tt") );
于 2019-05-20T09:56:27.887 回答