Преобразовать строку в DateTimeOffset, игнорируя часовые пояса - PullRequest
0 голосов
/ 18 мая 2018

Я создал string метод расширения , который преобразует конкретный string в DateTimeOffset.Я выполнил следующий метод:

public static DateTimeOffset? ConvertToDateTimeOffset(this string text)
{
    DateTimeOffset date;

    if (DateTimeOffset.TryParse(text, out date))
    {
        return date;
    }
    else
    {
        return null;
    }
}

с этой строкой:

"2010-05-10".ConvertToDateTimeOffset()

Я хочу получить следующий результат:

{2010. 05. 10. 0:00:00 +00:00}

Но фактический результатмоего вызова метода выполнения (пожалуйста, обратите внимание +02:00):

{2010. 05. 10. 0:00:00 +02:00}

Как я могу устранить эту проблему с часовым поясом ?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Отметьте ссылку .

Я считаю, что вы ищете

   DateTimeOffset.TryParse(text, null, DateTimeStyles.AssumeUniversal, out date);

Согласно документации

Indicates that, if the input parameter lacks an <Offset> element, the UTC offset (00:00) should be provided.

0 голосов
/ 18 мая 2018

Если вы хотите UTC , а не местное время , вам нужно указать его вручную с помощью DateTimeStyles.AssumeUniversal:

... 
if (DateTimeOffset.TryParse(text, 
                            CultureInfo.InvariantCulture,
                            DateTimeStyles.AssumeUniversal, 
                            out date)) {
  ...
}
...

Вы можете упростить реализацию (C #7.0+) с out var:

public static DateTimeOffset? ConvertToDateTimeOffset2(this string text) {
  return DateTimeOffset.TryParse(text, 
                                 CultureInfo.InvariantCulture, 
                                 DateTimeStyles.AssumeUniversal, 
                                 out var date)
    ? date
    : (DateTimeOffset?) null;
}
...