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

时间:2016-10-13 14:53:27

标签: asp.net vb.net datetime datetime-conversion

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

此行使用您的字符串Instant ajustedTime = Instant.now().plus(yourDurationInstance); 并使用提供的格式对其进行解析。当日期字符串采用模糊格式(例如10/13/2016 21:42)时,这很有用,即使这可能代表6月5日 th 或5月6日 th ,但是在我的例子中,知道它的日/月,5月6日 th 。有关详情,请参阅DateTime.ParseExact

06/05/2016

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

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

所以结果是有效的 - 取决于你如何检查 - 但是没有'result is 10/13/2016 09:42 指标。它已经是一个DateTime。对ETAtime的进一步操作可以证明这一点。

AM/PM

输出

  

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

您的代码确实没有问题。

我的IDE(Visual Studio 2012)在调试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) 时以此格式显示日期。我位于美国。显示的内容应基于您的区域设置。看到你的截图会很有趣。

enter image description here

答案 2 :(得分:0)

试试这个:

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