格式化惯用的可发音时间字符串

时间:2015-01-01 23:25:49

标签: vb.net string-formatting

我在Visual Basic中编写了一个表单,在一个名为“DigitalTime”的标签中显示当前系统时间(hh:mm:ss)。

现在对于困难部分:如何编写第二个标签(“WordTime”)以使用当前时间(来自“DigitalTime”)并在“WordTime”标签中显示如下:< /强>

示例1 :(时间是22:50)我希望标签“WordTime”显示“10分钟到11”。
示例2 :(时间是13:15)我希望标签“WordTime”显示“15分钟过去1”。

对于0-30分钟,我希望它显示“...分钟过去 ...”。对于31-59分钟,我希望它显示“......分钟 ...”。

2 个答案:

答案 0 :(得分:1)

事实证明,由于.NET中的DateTime和使用String.Format的精彩ToString formatters available,它并不难。 DateTime structure一般都有你需要知道的东西。一个警告和一个问题,从当前DateTime中减去时间我们添加负时间量。 DateTime上没有SubtractMinutes方法,只有AddMinutes,因此您添加了负时间。

所有这些都说明如下。理想情况下,你只是让它成为一个功能,但我把它保持得相当基本,所以不会让人感到困惑。

10分钟到11:

Dim _textToMinute As String = String.Empty
If DateTime.Now().Minute > 30 Then
    _TextToMinute = "Past"
Else
    _textToMinute = "To"
End If


Dim _minutesTillNextHour = (DateTime.Now().AddHours(1).AddMinutes(-DateTime.Now().Minute) - dateTime.Now).Minutes
Dim _nextHour = DateTime.Now().AddHours(1).ToString("%h")
label1.Text = String.Format("{0} minutes {1} {2}", _minutesTillNextHour, _textToMinute, _nextHour)

过去15分钟

label1.Text = String.Format("{0} minutes {1} {2}", DateTime.Now().Minute, _textToMinute, DateTime.Now().ToString("%h"))

答案 1 :(得分:0)

当分钟数为30时,通常的做法是使用“half”一词,如“6点半”。这是一个简单的小函数,它将这一点考虑在内并返回一个格式化的字符串,可以在任何需要的地方分配:

Function TimeInCommonLang(ByVal input As DateTime) As String
    Dim minutes As String = ""
    Dim indicator As String = ""
    If input.Minute <= 30 Then
        indicator = "past"
        If input.Minute = 30 Then
            minutes = "half"
        Else
            minutes = input.Minute.ToString & " minutes"
        End If
    Else
        indicator = "to"
        minutes = (60 - input.Minute).ToString & " minutes"
        input = input.AddHours(1)
    End If
    Return String.Format("{0} {1} {2}", minutes, indicator, input.ToString("%h"))
End Function