无论如何,有没有使用这种方法来格式化TimeSpan对象的格式:
TimeSpan timeSpan = new TimeSpan(1,1,0);
var formattedTimeSpan = timeSpan.ToString(@"hh\:mm");
提出这个问题的目的是,我实际上想执行上述操作,但不以字符串结尾。因为我仍然需要将格式化输出作为TimeSpan
而不是字符串来使用。TimeSpan
格式化后将其强制转换回a ,则默认将其重新格式化为有害格式hh:mm:ss
。
更新以回复@Idle_Mind以显示问题的基础:
这一切都在MVC项目中。我正在尝试生成一个时间选择器下拉列表,该列表将在@ Html.DropDownListFor标记中使用。
问题是下拉列表项以hh:mm:ss的格式显示。我不想使用ToString()对其进行格式化,因为我不想将模型属性类型从TimeSpan更改为String。该属性需要保持其原始类型的TimeSpan,否则进行此更改将导致大量回归。
OK-编码讨论在这里:
这就是我生成下拉列表项的方式:
/// <summary>
/// Provides a listItems of opening hours to use in an HTML DropDownListFor helper.
/// </summary>
/// <param name="slotObject"></param>
/// <returns></returns>
public static List<SelectListItem> GetOpeningHours(TimeSpan time)
{
// These could be later exposed in the webconfig if needed.
var startTime = new TimeSpan(7, 0, 0);
var closingTime = new TimeSpan(22,0,0);
var incrementer = new TimeSpan(0, 15, 0);
var timesList = new List<TimeSpan>();
var newTime = startTime.Add(incrementer);
for (TimeSpan i = startTime; i<closingTime; i+=incrementer)
{
timesList.Add(TimeSpan.Parse(i.Add(incrementer).ToString(@"hh\:mm")));
}
return GetDropDownList(timesList, time);
}
/// <summary>
/// Gets List Items in Text only, instead of a combination of text and value.
/// </summary>
/// <param name="selectOptions"></param>
/// <param name="selectedOption"></param>
/// <returns></returns>
private static List<SelectListItem> GetDropDownList(List<TimeSpan> selectOptions, TimeSpan selectedOption)
{
var listItems = new List<SelectListItem>();
foreach (var option in selectOptions)
{
listItems.Add(new SelectListItem
{
Text = option.ToString(),
Selected = TimeSpan.Compare(option, selectedOption) == 0
});
}
return listItems;
}
这就是我在Razor中使用它的方式
@Html.DropDownListFor(x => x.StartFrom, Website.ViewModels.ViewHelpers.OpeningTimesList.GetOpeningHours(Model.StartFrom), new { @class = "form-control" })
它是这样显示的:
问题再次出现:
我想停止这种丑陋的展示。我现在正在考虑更新上面的代码以显示两个项目:一个用于DropdownListItem文本(它包含字符串格式的格式化字符串),另一个用于Value(实际上是TimeSpan)-我认为这应该有效,但是让我知道不会吧;我将不胜感激。
我将用结果更新此内容。
非常感谢。
您不能“格式化”对象。打印时会发生格式化。因此,只要timeSpan
在需要的地方继续使用您的实例TimeSpan
,最后调用.ToString()
即可对其进行格式打印。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句