Как конвертировать формат даты в 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)