c # Синтаксический анализ даты и времени UTC

#c# #parsing #datetime

#c# #синтаксический анализ #дата и время

Вопрос:

Я пытаюсь проанализировать 23.11.2011 23:59:59 UTC 0800 как объект c # datetime, но, используя стандартный метод анализа даты и времени или даже точный анализ даты и времени, я получаю недопустимую дату.

Есть какие-нибудь идеи?

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

1. В какое время вы хотите? Вы живете в стране, где UTC 08? Вы хотите, чтобы ваше DateTime указывало время UTC (так 24 ноября 07:59) или что?

2. в местное время машины, на которой он работает

Ответ №1:

Я бы посоветовал вам выполнить синтаксический анализ с использованием a DateTimeOffset вместо a DateTime , как рекомендуется в MSDN при использовании спецификатора смещения часового пояса в строке формата:

 using System;
using System.Globalization;

class Test
{    
    static void Main(string[] args)
    {
        string text = "11/23/2011 23:59:59 UTC  0800";
        string pattern = "MM/dd/yyyy HH:mm:ss 'UTC' zzz";

        DateTimeOffset dto = DateTimeOffset.ParseExact
            (text, pattern, CultureInfo.InvariantCulture);
        Console.WriteLine(dto);
    }
}
 

Затем вы можете преобразовать это в DateTime значение в UTC, если хотите, но нет такого понятия, как «a DateTime со смещением в 8 часов» — a DateTime считается универсальным, локальным или неопределенным, и нигде не сохраняется конкретное смещение.

DateTime это любопытный тип по-разному и может вызвать проблемы у неосторожного разработчика.

Ответ №2:

Msdn для настроек формата: https://msdn.microsoft.com/en-us/library/az4se3k1 (v = против 110).aspx

 public class Program
{
    public static void Main()
    {
         //original date
        string _date = "Thu Jan 15 11:32:09  0200 2015";
         // Describes the date format
        string _parsePattern = "ddd MMM dd HH:mm:ss zzz yyyy"; 

         DateTimeOffset dto = DateTimeOffset.ParseExact(_date, _parsePattern, CultureInfo.InvariantCulture);

         //last settings
        Console.WriteLine(dto.ToString("dd.MM.yyyy hh:mm:ss",CultureInfo.CreateSpecificCulture("tr-TR")));
    }
}
 

для метода расширения:

 public static DateTime getDateFromFormat(this string _date, string _parsePattern)
        {
            DateTimeOffset dto = DateTimeOffset.ParseExact(_date, _parsePattern, CultureInfo.InvariantCulture);
            return Convert.ToDateTime(dto.ToLocalTime());
        }
 

Для теста: https://dotnetfiddle.net/xdnjGy

Ответ №3:

Как написано Джеймсом, вы можете попробовать

 var dt = DateTime.ParseExact(
         "11/23/2011 23:59:59 UTC  0800", 
         "MM/dd/yyyy HH:mm:ss 'UTC' K", 
          CultureInfo.InvariantCulture);
 

Вы получите дату по «местному» времени.

Ответ №4:

Я думаю, вам нужно использовать ParseExact http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx