DateTime.Parse анализирует временную метку в каком часовом поясе? - PullRequest
5 голосов
/ 09 мая 2019

Я анализирую строковое время в дате, используя метод DateTime.Parse. Он правильно анализирует и возвращает мне сегодняшнюю дату с указанным временем. Но я не могу определить часовой пояс, когда он принимает участие в дате. Это с учетом местной даты или даты UTC?

public class Program
{
    public static void Main(string[] args)
    {
        //Your code goes here
        Console.WriteLine(DateTime.Parse("4:00"));
        //prints 09.05.2019 04:00:00 - here did it take 09.05.2019 from local timezone or is it UTC?
    }
}

При ссылке на официальную документацию из DateTime.Parse она упоминается примерно следующим образом:

Строка с указанием времени, но без компонента даты. Метод предполагает текущую дату, если только вы не вызовете перегрузку Parse (String, IFormatProvider, DateTimeStyles) и не включите DateTimeStyles.NoCurrentDateDefault в аргумент стилей, и в этом случае метод предполагает дату 1 января 0001.

Я запутался, в какой именно культуре выбрана дата?

Ответы [ 2 ]

4 голосов
/ 09 мая 2019

Кроме того, это Unspecified.

Прежде всего, в .NET Framework структура DateTime не хранит информацию о часовом поясе.Он обладает свойством Kind, которое отражает некоторую информацию как Utc, Local или Unspecified, но они не идеально относятся к часовому поясу.

В вашем случае, поскольку вы неНе предоставляйте никаких других параметров, ваш результат DateTime будет Unspecified.

Это указано в документации как;

Если s содержит информацию о часовом поясе, этот метод возвращает значение DateTime со свойством Kind DateTimeKind.Local и конвертирует дату и время в с в местное время. В противном случае он не выполняет преобразование часового пояса и возвращает значение DateTime, свойство Kind которого DateTimeKind.Unspecified.

Для части представления при использовании DateTime в Console.WriteLineметод, он вызывает WriteLine(object) перегрузка , и это вызывает текущий FormatProvider, который пришел от Thread.CurrentThread.CurrentCulture.

0 голосов
/ 09 мая 2019

По умолчанию выбирается текущая активная системная культура (в которой выполняется код C #), локальная дата и ее формат, а затем добавляется ваше время к этой дате.Поскольку ваше время имеет только одно числовое значение, то есть 4, поэтому оно будет отображаться как 4 часа утра.

Таким образом, вывод может быть как 09.05.2019 04:00:00 или 5/9/2019 4:00:00 AM в зависимости от текущего формата системы сервера, на котором кодказнены.Вы можете увидеть текущую культуру системы, щелкнув правой кнопкой мыши по времени на панели задач Windows и увидеть формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...