转换字符串到日期时间(24 小时格式)不匹配

Conversion String to Datetime (24 hour format) is not match

我有一个字符串10/13/2016 21:42

Dim ETAtime1 As String = Convert.ToDateTime("10/13/2016 21:42").ToString("MM/dd/yyyy HH:mm")
'result is 10/13/2016 21:42

我希望结果是 10/13/2016 21:42(24 小时格式),如上面的字符串。但是为什么我像下面这样转换后变成了12小时制呢?

 Dim ETAtime As DateTime = DateTime.ParseExact(ETAtime1, "MM/dd/yyyy HH:mm", Nothing)
'result is 10/13/2016 09:42

如何解决,变成09:42而不是21:42?我需要 DateTime 类型的数据而不是字符串。

试试这个:

      dddd, MMMM d, yyyy HH:mm:ss tt"

DateTime 对象没有 "format",可以将其视为实际保存的日期和时间。将该信息存储在 DateTime 对象中可以让您对其执行 mathematical/logical 操作。如何向用户显示 DateTime 小时由您决定。 ToString 方法可以显示这些小时格式中的任何一种,具体取决于您传递给它的格式字符串...例如:

    Dim ETAtime1 As String = Convert.ToDateTime("10/13/2016 21:42").ToString("MM/dd/yyyy HH:mm")
    Dim ETAtime As DateTime = DateTime.ParseExact(ETAtime1, "MM/dd/yyyy HH:mm", Nothing)

    MsgBox(ETAtime.ToString("HH:mm"))
    'Outputs 21:42
    MsgBox(ETAtime.ToString("h:mm"))
    'Outputs 9:42

此行获取您的字符串 10/13/2016 21:42 并使用提供的格式对其进行解析。这在日期字符串的格式不明确时很有用,例如 06/05/2016,即使这可能表示 June 5th 或 May 6th,但您 知道 在我的示例中是 day/month,5 月 6th。有关详细信息,请参阅 DateTime.ParseExact

Dim ETAtime As DateTime = DateTime.ParseExact(ETAtime1, "MM/dd/yyyy HH:mm", Nothing)

此方法的结果是 DateTime,而不是字符串。

'result is 10/13/2016 09:42

因此结果是有效的 - 取决于您检查它的方式 - 但是没有 AM/PM 指标。它已经是一个日期时间。 ETAtime上的进一步操作可以证明这一点。

Dim ETAtime1 As String = Convert.ToDateTime("10/13/2016 21:42").ToString("MM/dd/yyyy HH:mm")
Dim ETAtime As DateTime = DateTime.ParseExact(ETAtime1, "MM/dd/yyyy HH:mm", Nothing)
Console.WriteLine("{0:MM/dd/yyyy HH:mm}", ETAtime)
Console.WriteLine("{0:MM/dd/yyyy hh:mm}", ETAtime)
Console.WriteLine("{0:MM/dd/yyyy hh:mm tt}", ETAtime)

输出

10/13/2016 21:42
10/13/2016 09:42
10/13/2016 09:42 PM

你的代码确实没有问题。

我的IDE(Visual Studio2012)在调试10/13/2016 09:42 PM时以这种格式显示日期。我位于美国。显示的内容应基于您的区域设置。看到你的屏幕截图会很有趣。