将Timespan变量转换为12小时格式的问题

时间:2013-06-27 10:43:00

标签: asp.net asp.net-mvc

我有一个可以为空的变量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.

5 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

编辑:另请参阅@Sean's评论,了解如何在不转换为DateTime的情况下输出Timespan。

编辑:原来我有点不对 - st.ToString()不会返回上面的内容。所以看看肖恩的答案。

答案 3 :(得分:0)

首先通过将TimeSpan添加到基准日期00:00来将Timespan转换为Datetime。然后在该dateTime上获得12小时格式。

DateTime.Now.Date.Add(OpenTimeSpan).ToString(@"hh\:mm\:tt")

答案 4 :(得分:0)

接受的答案是错误的。
您无法返回TimeSpan的AM / PM,因为它仅与时间的长度有关,   不是 一天中的某个时间-使用名称“ TimeSpan ”。
首先转换为DateTime,然后再转换为String:

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

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

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