0

我有一个字符串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 类型的数据而不是字符串。

4

3 回答 3

2

DateTime 对象没有“格式”,将其视为仅保存实际的日期和时间。将该信息存储在 DateTime 对象中是允许您对其执行数学/逻辑运算的原因。如何向用户显示 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
于 2016-10-13T15:24:05.813 回答
1

此行获取您的字符串,10/13/2016 21:42并使用提供的格式对其进行解析。这在日期字符串的格式不明确时很有用,例如06/05/2016,即使这可能表示 June 5 th或 May 6 th,但您知道它是日/月,在我的示例中是 5 月 6日。有关更多信息,请参阅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)

输出

2016 年 10月 13 日 21:42 2016 年 10 月 13 日
09:42 2016 年 10 月 13 日
09:42 下午

您的代码确实没有问题。

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

在此处输入图像描述

于 2016-10-13T15:26:46.083 回答
0

尝试这个 :

      dddd, MMMM d, yyyy HH:mm:ss tt"
于 2016-10-13T15:03:13.077 回答