Кто-нибудь знает способ объявить константу даты, совместимую с международными датами?
Я пробовал:
' not international compatible
public const ADate as Date = #12/31/04#
' breaking change if you have an optional parameter that defaults to this value
' because it isnt constant.
public shared readonly ADate As New Date(12, 31, 04)





Хорошо, я не уверен, что вы здесь пытаетесь сделать:
Например:
public static DateTime SadDayForAll()
{
return new DateTime(2001, 09, 11);
}
Откуда, черт возьми, ты все это взял ?!
Согласно документации Microsoft,
"Вы должны заключить литерал даты в числовые знаки (# #). Вы должны указать значение даты в формате M / d / yyyy, например # 5/31/1993 #. Это требование не зависит от вашего языкового стандарта и вашего компьютера. настройки формата даты и времени ".
Вы говорите, что это неверно и на синтаксический анализ влияет текущая локаль?
Редактировать: Вы пробовали с 4-значным годом?
Хорошо, я понимаю больше, откуда вы ...
Как насчет:
Обновлено: Если вы не уверены, что я имею в виду, и хотели бы получить образец кода, просто прокомментируйте этот пост, и я брошу его.
Если у вас есть данные в объектах Date в VB, вам не нужно беспокоиться о глобализации, пока вы не сравните что-то с этим или не попытаетесь экспортировать его.
Это хорошо:
Dim FirstDate as Date = Date.UtcNow() 'or this: = NewDate (2008,09,10)'
Dim SecondDate as Date
SecondDate = FirstDate.AddDays(1)
Это извлекает правила глобализации и печатает в формате культуры текущего потока:
HeaderLabel.Text = SecondDate.ToString()
Это плохо:
Dim BadDate as Date = CDate("2/20/2000")
На самом деле - даже это нормально, если вы заставляете CDate в этом случае использовать правильную культуру (InvariantCulture):
Dim OkButBadPracticeDate as Date = CDate("2/20/2000", CultureInfo.InvariantCulture)
Если вы хотите принудительно привязать все к определенной культуре, вам необходимо установить культуру исполняемого потока и культуру пользовательского интерфейса на желаемую культуру (en-US, инвариант и т. д.).
Убедитесь, что вы не работаете с датами как строками - убедитесь, что они являются действительными объектами Date!
Если вы посмотрите на IL, сгенерированный оператором
public const ADate as Date = #12/31/04#
Вы увидите это:
.field public static initonly valuetype [mscorlib]System.DateTime ADate
.custom instance void [mscorlib]System.Runtime.CompilerServices.DateTimeConstantAttribute::.ctor(int64) = ( 01 00 00 C0 2F CE E2 BC C6 08 00 00 )
Обратите внимание, что DateTimeConstantAttribute инициализируется конструктором, который принимает счетчик тиков int64. Поскольку это количество тиков определяется во время компиляции, маловероятно, что какая-либо локализация вступит в игру, когда это значение инициализируется во время выполнения. Я предполагаю, что ошибка связана с другой обработкой даты в вашем коде, а не с инициализацией const.
Конечно, возможно, что в компиляторе VB (2005) есть ошибка синтаксического анализа. Однако мне не удалось воспроизвести это с версией 2008 года.
Спасибо, Джейсон, ты абсолютно прав. Я посоветовался с разработчиком, у которого возникла эта проблема, и, конечно же, там был CDate («31.12.2049»).
Курт, в качестве обновления. Я поговорил с нашим разработчиком, у которого возникла проблема, и, углубившись в нее, обнаружил, что в его коде был CDate («31.12.2049»), который на самом деле был виновником. Спасибо за ваш вклад и готовность помочь.