Где спецификатор формата DateTime 'Z'?

Try ...

Sub PartNumber()

Dim xCell As Range

For Each xCell In Range("firstDigit")
    If xCell Like WorksheetFunction.Rept("[a-zA-Z]", Len(xCell)) Then
        xCell.Offset(0, 2) = "Alpha Only"
    Else
        xCell.Offset(0, 2) = "Contains non Alpha Char"
        xCell.Offset(0, 2).Interior.Color = vbYellow   'To color the cell that has string
    End If
Next xCell

End Sub
56
задан Daniel Crenna 7 May 2009 в 06:38
поделиться

4 ответа

Может быть, спецификатор формата "K" будет полезен. Это единственный, в котором упоминается использование заглавной буквы «Z».

«Z» является своего рода уникальным случаем для DateTimes. Буква «Z» фактически является частью стандарта даты и времени ISO 8601 для времени UTC. Когда «Z» (Zulu) привязан к концу времени, это означает, что это время UTC, поэтому в действительности литерал Z является частью времени. Это, вероятно, создает несколько проблем для библиотеки формата даты в .NET, поскольку она на самом деле является литералом, а не спецификатором формата.

61
ответ дан 26 November 2019 в 17:27
поделиться

Round tripping dates through strings has always been a pain...but the docs to indicate that the 'o' specifier is the one to use for round tripping which captures the UTC state. When parsed the result will usually have Kind == Utc if the original was UTC. I've found that the best thing to do is always normalize dates to either UTC or local prior to serializing then instruct the parser on which normalization you've chosen.

DateTime now = DateTime.Now;
DateTime utcNow = now.ToUniversalTime();

string nowStr = now.ToString( "o" );
string utcNowStr = utcNow.ToString( "o" );

now = DateTime.Parse( nowStr );
utcNow = DateTime.Parse( nowStr, null, DateTimeStyles.AdjustToUniversal );

Debug.Assert( now == utcNow );
5
ответ дан 26 November 2019 в 17:27
поделиться

На этой странице в MSDN перечислены строки стандартного формата DateTime, исключая строки, использующие букву «Z».

Обновление: вам нужно убедиться, что остальная часть строки даты следует правильный шаблон (вы не предоставили пример того, что вы его отправляете, поэтому трудно сказать, отправили вы это или нет). Чтобы формат UTC работал, он должен выглядеть так:

// yyyy'-'MM'-'dd HH':'mm':'ss'Z'
DateTime utcTime = DateTime.Parse("2009-05-07 08:17:25Z");
2
ответ дан 26 November 2019 в 17:27
поделиться
Label1.Text = dt.ToString("dd MMM yyyy | hh:mm | ff | zzz | zz | z");

выведет:

07 Mai 2009 | 08:16 | 13 | +02:00 | +02 | +2

Я нахожусь в Дании, мое смещение от GMT составляет +2 часа, это верно.

если вам нужно получить Смещение КЛИЕНТА , я рекомендую вам проверить маленькую уловку , которую я сделал. Страница находится на сервере в Великобритании, где GMT ​​+00: 00, и, как вы можете видеть, вы получите местное смещение по Гринвичу.


Что касается вашего комментария, я сделал:

DateTime dt1 = DateTime.Now;
DateTime dt2 = dt1.ToUniversalTime();

Label1.Text = dt1.ToString("dd MMM yyyy | hh:mm | ff | zzz | zz | z");
Label2.Text = dt2.ToString("dd MMM yyyy | hh:mm | FF | ZZZ | ZZ | Z");

и получил следующее:

07 Mai 2009 | 08:24 | 14 | +02:00 | +02 | +2
07 Mai 2009 | 06:24 | 14 | ZZZ | ZZ | Z 

У меня нет исключения, просто ... он ничего не делает с заглавной буквой Z: (

Извините, но я что-то упускаю?


Внимательно читайте MSDN на Строки настраиваемого формата даты и времени

] заглавная буква Z не поддерживается.

2
ответ дан 26 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: