如何在VB.net中将24小时时间转换为12小时时间(hh:mm AM/PM)

11

假设我有1400,我想将其转换为下午2点。

我尝试了以下方法:

Dim convertedTime As String = DateTime.ParseExact(theTime,"HHmm", Nothing)

并且它会给我这个:

2012年6月12日 下午02:00:00

我不想要日期部分,也不需要秒数。我只需要下午2点。

我该怎么做呢?谢谢!


ParseExact不会返回字符串。你是否开启了Option Strict On? - Chris Dunaway
8个回答

18
ParseExact方法返回的是一个DateTime值,而不是字符串。如果您将其分配给字符串变量,则会自动进行转换,使用标准格式。
如果您想以特定格式显示日期时间值,请将其格式化为字符串:
Dim d As DateTime = DateTime.ParseExact(theTime,"HHmm", Nothing);
Dim convertedTime As String = d.ToString("hh:mm tt")

3

Label1.Text = Format(Now, "hh:mm"): Label1的文本= 10:26(或者当前时间)

Label1.Text = Format(Now, "hh:mm tt"): Label1的文本= 10:26 PM(或者当前时间的下午时间)

Label1.Text = Format(Now, "dddd dd, MMMM, YYYY"): Label1的文本= Thursday 21, August, 2014(或者当前日期)


请确保使用正确的格式(内联代码使用反引号),这样可以使您的答案更易读。查看帮助并测试编辑器工具栏,以了解可能性。 - TimWolla

2
Label1.Text = Now.ToShortTimeString.ToString()   (10:26 PM)

Label1.Text = Now.ToLongTimeString.ToString()    (10:26:30 PM) 

1

@Cyborgx37:这个问题的误导性在于此。实际上,OP没有解析1400到DateTime的问题:“...它会给我这个:6/12/2012 02:00:00 PM。我不想要日期部分,也不需要秒数。我只需要下午2点。”他只是想将一个DateTime变量转换为具有适当格式的字符串。 - Tim Schmelter

0

有两种方法可以实现这个目标。

选项1(使用标准日期和时间格式字符串):

Dim theTime As DateTime = new DateTime(2008, 4, 10, 6, 30, 0)
Dim convertedTime As String = 
    theTime.ToString("t", CultureInfo.CreateSpecificCulture("en-us"))

选项2(使用自定义日期和时间格式字符串):

Dim theTime As DateTime = new DateTime(2008, 4, 10, 6, 30, 0)
Dim convertedTime As String = theTime.ToString("hh:mm tt")

在这两种情况下,convertedTime 均为 上午6:30

你不需要使用en-us文化,可以使用CultureInfo.InvariantCulture - Tim Schmelter
1
@TimSchmelter 标准格式字符串t在使用CultureInfo.InvariantCulture时不会返回AM/PM。请参见 https://compilify.net/1u5 - Dennis Traub
抱歉,你是对的,我忽略了选项1和2之间的差异。 - Tim Schmelter

0

您可以使用String.Format()函数而无需使用ParseExtract()函数

VB.NET:-

Dim time As String = String.Format("{0:hh}:{0:mm} {0:tt}", Date.Now) '12:00 PM'
Dim time_1 As String = String.Format("{0:hh}:{0:mm}:{0:ss} {0:tt}", Date.Now) '12:00:25 PM'
Dim time_2 As String = String.Format("{0:mm}:{0:ss}.{0:fff}", Date.Now) '00:25.986 - Mostly Used In Stopwatches'

CSharp (C#):

String time = String.Format("{0:hh}:{0:mm} {0:tt}", DateTime.Now); // 12:00 PM
String time_1 = String.Format("{0:hh}:{0:mm}:{0:ss} {0:tt}", DateTime.Now); // 12:00:25 PM
String time_2 = String.Format("{0:mm}:{0:ss}.{0:fff}", DateTime.Now); // 00:25.986 - Mostly Used In Stopwatches

以上代码仅为示例,您可以使用上述代码进行实验/观察/制作应用程序


以上代码 - stackoverflowuser
格式化:String.Format(ByVal format As String, ByVal ParamArray args() As Object) - stackoverflowuser
使用 String.Format() 函数不会删除任何内容,而是使用添加的格式将任何内容转换为字符串。 - stackoverflowuser

0

试试这个...

  Dim TimeNow As String
  TimeNow = TimeOfDay.ToString("h:mm:ss tt")

-1
stackoverflowuser: 
You Can Use String.Format() Function Without ParseExtract() Function

VB.NET:-

Dim time As String = String.Format("{0:hh}:{0:mm} {0:tt}", Date.Now) '12:00 PM'
Dim time_1 As String = String.Format("{0:hh}:{0:mm}:{0:ss} {0:tt}", Date.Now) '12:00:25 PM'
Dim time_2 As String = String.Format("{0:mm}:{0:ss}.{0:fff}", Date.Now) '00:25.986 - Mostly Used In Stopwatches'
CSharp (C#):-

String time = String.Format("{0:hh}:{0:mm} {0:tt}", DateTime.Now); // 12:00 PM
String time_1 = String.Format("{0:hh}:{0:mm}:{0:ss} {0:tt}", DateTime.Now); // 12:00:25 PM
String time_2 = String.Format("{0:mm}:{0:ss}.{0:fff}", DateTime.Now); // 00:25.986 - Mostly Used In Stopwatches
Above Codes Are Examples, You Can Use Above Codes To Experiment/Observe/Make Applications With It

你也可以在以下地方使用:

VB.NET:-

Label1.Text = String.Format("{0:hh}:{0:mm} {0:tt}", Date.Now) 'Display: 12:00 PM'

C#(CSharp):

label1.Text = SString.Format("{0:hh}:{0:mm} {0:tt}", DateTime.Now); // Display: 12:00 PM

您将在VB.NET和C#中获得任何标签的格式化时间


这个解决方案并没有真正澄清任何问题,虽然它直接回答了问题标题,但它没有涉及到问题中发布的代码,并且也没有遵循或参考 MS Docs 上关于此主题的标准指导。您还引入了 C#,尽管此问题已经被标记为 VB.net 并有相应的标题。请尝试不要在不做出真正贡献和包括强有力的理由说明该答案优于现有答案的情况下打开旧帖子。 - Chris Schaller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接