Поведение CDATE не согласуется с документацией (для меня)

#vb.net

#vb.net

Вопрос:

Пожалуйста, взгляните на следующую веб-страницу: http://msdn.microsoft.com/en-us/library/3eaydw6e.aspx:

» Вы должны заключить литерал даты в числовые знаки (# #). Вы должны указать значение даты в формате M / d / гггг, например #31/5/1993 #. Это требование не зависит от вашего региона и настроек формата даты и времени на вашем компьютере «.

Теперь посмотрите на приведенный ниже код:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim str As String = "1-2-1999"
        Dim dte As Date = CDate(str)
        MsgBox(dte.Month)
    End Sub
 

Вопросы:

1) Окно сообщения печатает: 2. Я бы ожидал, что он напечатает 1 на основе следующей цитаты: «Вы должны указать значение даты в формате M / d / гггг».
2) Строковый литерал: 1-2-1999, а не #1-2-1999 #, но в цитате говорится: «Вы должны заключить литерал даты в числовые знаки (# #)»

Комментарии:

1. нет необходимости создавать строку только для преобразования ее в дату, просто создайте дату напрямую (обычно это наоборот) Dim dte As Date = New Date(1999, 1, 2) (Y, M, D) порядок

2. @Plutonix спасибо, дата берется из поля базы данных, поэтому ее будет сложно разобрать как 1999,1,2. Вы можете ответить на мой вопрос?

3. имеет ли база данных дату в виде типа даты или в виде строки?

4. @Plutonix , это тип даты в базе данных.

5. тогда вам должно быть хорошо, дата — это дата. проблема заключается в попытке использовать строки в качестве дат. myDate = dbObject("OrderDate") должно работать нормально. Британец увидит это как «D / M / Y», а Янк — как «M / D / Y» при отображении

Ответ №1:

Из MSDN: You must enclose a Date literal within number signs (# #). You must specify the date value in the format M/d/yyyy, for example #5/31/1993#. Это не то, что вы сделали. Вы создали строку, затем преобразовали ее в дату. Для создания Date переменной с использованием литерала:

 Dim dte As Date = #1/2/1999#
Console.WriteLine(dte.Month)      ' prints 1  
 

Комментарии:

1. Спасибо 1. Еще одна вещь. Пожалуйста, посмотрите на эту веб-страницу: msdn.microsoft.com/en-gb/library/system.datetime.aspx . ДАТА и ДАТА-ВРЕМЯ, похоже, используются взаимозаменяемо. Вы знаете, почему?

2. Date это чистая вещь в mscorlib, DateTime определяется как базовый системный тип / структура, но я думаю, что они просто используют Date в качестве сокращения DateTime . В DateAndTime пространстве имен VB также определено

3. вы бы использовали date или datetime?

4. Я не думаю, что есть какая-то разница. конструктор для даты (как я использовал в первом комментарии) также принимает временные переменные. Я думаю, что DateTime — это, по сути, структура, которую реализует Date. Intellisence дает для них то же определение

5. Я вижу, как int64 является строгим, с которым реализован long. Спасибо.