【问题标题】:Convert TimeSpan from format "hh:mm:ss" to "hh:mm"将 TimeSpan 从格式“hh:mm:ss”转换为“hh:mm”
【发布时间】:2012-10-01 12:24:11
【问题描述】:

我只想在文本框中显示小时和分钟

var test = dataRow.Field<TimeSpan>("fstart").ToString();  
//test ="08:00:00"  
var tb = (TextBox) gridViewRow.Cells[2].FindControl("fstart");
tb.Text = test;

如何只显示小时和分钟"hh.mm"

【问题讨论】:

  • 提示是查看Roslyn CTP,如果您使用 Visual Studio,我发现它对于测试 C# 中的格式非常有用。

标签: c# asp.net textbox timespan


【解决方案1】:

您需要将数据转换为 TimeSpan,然后使用格式:"hh\:mm"

string test ="08:00:00";
TimeSpan ts = TimeSpan.Parse(test);
Console.Write(ts.ToString(@"hh\:mm"));

在你的情况下:

var test = dataRow.Field<TimeSpan>("fstart").ToString(@"hh\:mm"));

记得转义冒号:

你可能会看到:Custom TimeSpan Format Strings

【讨论】:

  • 如果在 ASP .net 中出现相同的情况,则没有像 .Tostring() 这样的方法接受参数。
  • @Rahul,在 .Net 框架 4.0 中提供了重载的 TimeSpan.ToString 方法。我猜您所指的 ASP.Net 应用程序使用的是以前版本的 .Net 框架。
【解决方案2】:

无需将hh.mm.ss 转换为hh.mmTimeSpan 存储为多个滴答声(1 个滴答声 == 100 纳秒)并且没有固有格式。您要做的就是将TimeSpan 转换为人类可读的字符串!这涉及格式化。如果您没有明确指定格式,将使用默认格式。在这种情况下hh.mm.ss

string formatted = timespan.ToString(@"hh\.mm");

注意:ToString 的重载从 .NET 4.0 开始存在。 它不支持日期和时间占位符分隔符!因此,您必须将它们作为(转义的)字符串文字。

由于某些奇怪的原因,格式化字符串的常用方法似乎不起作用(使用 .NET 3.5 测试)。 (是否转义分隔符没有任何区别):

var timespan = TimeSpan.FromSeconds(1234);
string formatted = String.Format(@"{0:hh\.mm}", timespan); // ==> 00:20:34

但是,你可以像这样构造字符串

string formatted =
    String.Format("{0:00}.{1:00}", Math.Floor(timespan.TotalHours), timespan.Minutes);

或从 VS2015 / C# 6.0 开始,使用字符串插值:

string formatted = $@"{timespan:hh\:mm}";

【讨论】:

  • 不要忘记 TotalHours 上的 Math.Floor()。没有这个 29,7h => 转换为 30:42...
【解决方案3】:

您可以使用 TimeSpan 方法:

ToString("hh':'mm")
// or
ToString(@"hh\:mm")

还可以在这里查看所有可用的格式http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

【讨论】:

  • TimeSpan.ToString 不支持这种格式。见this
  • 这是 .Net 4 中的新功能
【解决方案4】:
var test = dataRow.Field<TimeSpan>("fstart").ToString("hh.mm");  
//test ="08:00"  
var tb = (TextBox) gridViewRow.Cells[2].FindControl("fstart");
tb.Text = test;

【讨论】:

  • 如果输入包含 : ,它将在 fomrat hh.mm 上失败
【解决方案5】:

我知道这是一个非常古老的问题。如果有人想在您的小时数为一位数时显示一位数小时数,那么您可以使用

var hoursWithMinutes = TimeSpan.FromHours(hours).ToString(@"h\:mm")

这样,当您的小时数是两位数时,我的意思是大于 9,那么它将显示 10:00 类似的内容。

【讨论】:

    【解决方案6】:

    如果 hours>24 则以前的解决方案不会运行,如果您有非常多的时间(以分钟为单位),请尝试此解决方案

    int minutes = 159000;
    TimeSpan t = new TimeSpan(0, minutes, 0);
    
    String HOURS = Math.Round(t.TotalHours, 0).ToString();
    if (HOURS.Length==1)
    {
        HOURS = "0"+HOURS;
    }
    
    
    String MINUTES = t.Minutes.ToString();
    if (MINUTES.Length == 1)
    {
        MINUTES = "0" + MINUTES;
    }
    
    
    String RESULT = HOURS + ":" + MINUTES;
    

    【讨论】:

      【解决方案7】:

      您可以通过以下方式实现:

        var hhmm = TimeSpan.FromMinutes(minutes).ToString(@"hh\:mm")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多