我得到xml响应日期格式字符串是“MM / dd / yyyy h:mm:ss a”但我需要转换其他日期格式“”dd MMM yy HH:mm“”。
如何在vb.net中转换日期格式?请给我任何建议。
答案 0 :(得分:13)
假设您想将xml字符串值转换为正确的DateTime
变量,Net有许多方法:
' a date value in the string format specified:
Dim xmlDate As String = "07/15/2014 7:07:33 AM"
' create a DATE variable from that string in a known format:
Dim newDate As Date = DateTime.ParseExact(xmlDate, "MM/dd/yyyy h:mm:ss tt",
Globalization.CultureInfo.InvariantCulture)
一旦你有了实际的日期变量,你就可以用任何所需的格式显示它。这样做不会更改基础日期值,只会更改输出样式:
Dim myDt As DateTime = DateTime.Now
Console.WriteLine(mydt.ToString("dd MMM yy HH:mm tt"))
Console.WriteLine(mydt.ToString("MM/dd/yyyy h:mm:ss"))
DateTime
类型是值;他们没有格式。格式是我们如何向人类显示数据(与上面的.ToString()
一样)以及我们如何在将人类的文本数据解析为DataTime
变量时告诉DateTime
模式。
使用许多VB函数时必须小心。有些根本不创建日期类型,只是新的字符串变量。使用其他文化的日期字符串时,CDate
可能会特别成问题。它假定字符串是当前的文化格式,可能不是这种情况。这可能会导致08/07/yyyy
转换为07/08/yyyy
。
原始问题:
I am getting xml response date format string is "MM/dd/yyyy h:mm:ss a"
评论:
xml returning date format is "7/8/2014 12:00:00 PM"
问题中指定的格式与评论中发布的示例不匹配。 xmlDate文本实际上是M/d/yyyy
格式,而不是MM/dd/yyyy
!使用ParseExact
表示我们正在提供{{1>} 完全格式。当格式不与实际字符串模式匹配时,它将失败:
DateTime
这将失败,因为文本不是Dim actualDate As Date
Dim xmlTest As String = "7/8/2014 12:00:00 PM"
actualDate = DateTime.ParseExact(xmlSource, "MM/dd/yyyy h:mm:ss tt",
Globalization.CultureInfo.InvariantCulture)
格式。请注意,MM/dd
可以以"M/d"
模式解析字符串中的日期,因为某些日期和月份将为2个字符(“10/20 ...”)。但反之则不然:“MM / dd”将需要领先的"MM/dd"
。指定正确的格式,您将不会得到格式异常:
0
actualDate = DateTime.ParseExact(xmlSource, "M/d/yyyy h:mm:ss tt",
Globalization.CultureInfo.InvariantCulture)
可能是最好的方法,因为它似乎是从其他地方导入数据。对于用户输入的简单数据验证,ParseExact
或Parse
通常就足够了。这些将尝试使用为当前文化定义的任何格式模式来解析文本。
一些cultures have well over 100。这意味着用户几乎可以根据需要输入日期数据,您的代码仍然可以将其解析/转换为TryParse
类型。
有关详细信息,请参阅DateTime.ParseExact。
答案 1 :(得分:3)
Dim theirTime = "07/15/2014 1:43:38 PM"
Dim myFormat = "dd MMM yy HH:mm"
Dim myTime = Format(CDate(theirTime), myFormat)
答案 2 :(得分:1)
Dim dat As Date
Dim dd, mm, yyyy As String
DateTimePicker1.Value = DateTimePicker1.Value.AddDays(1)
If Len(DateTimePicker1.Value.Day) = 2 Then
dd = DateTimePicker1.Value.Day
Else
dd = "0" & DateTimePicker1.Value.Day
End If
If Len(DateTimePicker1.Value.Month) = 2 Then
mm = DateTimePicker1.Value.Month
Else
mm = "0" & DateTimePicker1.Value.Month
End If
yyyy = DateTimePicker1.Value.Year
dat = dd & "/" & mm & "/" & yyyy
答案 3 :(得分:0)
你可以这样做:
Dim time As DateTime = DateTime.Now 'Your date
Dim format As String = "dd MMM yy HH:mm"
Dim newdate = time.ToString(format)
答案 4 :(得分:0)
Dim CommenceDateFormat As Date =
Date.ParseExact(CommenceDate, "dd/MM/yyyy", System.Globalization.DateTimeFormatInfo.InvariantInfo) 'converts date to a format understood for comparisons
Dim EndDateFormat As Date =
Date.ParseExact(EndDate, "dd/MM/yyyy", System.Globalization.DateTimeFormatInfo.InvariantInfo)