假设您想将 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
类型是value;他们没有格式。格式是为了我们如何向人类显示数据(如.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
意味着我们正在给予DateTime
the exact格式符合预期。当格式为not匹配实际的字符串模式,它将失败:
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"
can以以下模式解析字符串中的日期"MM/dd"
因为有些日子和月份将是 2 个字符(“10/20...”)。但反之则不然:“MM/dd”将需要领先0
。指定正确的格式,您将不会收到格式异常:
actualDate = DateTime.ParseExact(xmlSource, "M/d/yyyy h:mm:ss tt",
Globalization.CultureInfo.InvariantCulture)
ParseExact
可能是这里最好的方法,因为看起来您正在从其他地方导入数据。对于用户输入的简单数据验证,Parse
or TryParse
通常就足够了。这些将尝试使用解析文本任何格式模式为当前文化定义。
Some 文化有超过100种 https://dotnetfiddle.net/WImdZ7。这意味着用户几乎可以以任何他们想要的方式输入日期数据,并且您的代码仍然可以将其解析/转换为DateTime
type.
See 日期时间.ParseExact http://msdn.microsoft.com/en-us/library/System.DateTime.ParseExact(v=vs.110).aspx了解更多信息。