Как конвертировать формат даты в vb.net?
Я получаю строку формата даты ответа xml "MM/dd / yyyy h:mm:ss a", но мне нужно преобразовать другой формат даты ""dd MMM yy HH:mm"".
Как конвертировать формат даты в vb.net? Пожалуйста, дайте мне любое предложение.
5 ответов
предполагая, что вы хотите преобразовать строковое значение 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 фактически находится в , а не MM/dd/yyyy
! Используя ParseExact
означает, что мы даем DateTime
на точно ожидать. Когда формате не соответствует фактическому шаблону строки, он будет fail:
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)
это не удастся, потому что текст в . Обратите внимание, что "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
или TryParse
обычно достаточно. Они попытаются разобрать текст с помощью любой из шаблонов формате определено для текущей культуры.
некоторые культуры имеют более 100. Это означает, что пользователь может вводить данные даты почти в любом случае, и ваш код все еще может анализировать / конвертировать его в DateTime
тип.
посмотреть DateTime.Метод parseexact для получения дополнительной информации.
Dim theirTime = "07/15/2014 1:43:38 PM"
Dim myFormat = "dd MMM yy HH:mm"
Dim myTime = Format(CDate(theirTime), myFormat)
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
вы можете сделать это так:
Dim time As DateTime = DateTime.Now 'Your date
Dim format As String = "dd MMM yy HH:mm"
Dim newdate = time.ToString(format)
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)