c # Разбор даты и времени UTC - PullRequest
       1

c # Разбор даты и времени UTC

18 голосов
/ 27 октября 2011

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

Есть идеи?

Ответы [ 4 ]

31 голосов
/ 27 октября 2011

Я бы посоветовал вам выполнить синтаксический анализ DateTimeOffset вместо 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, если хотите, но не существует такой вещи, как «DateTime со смещением 8 часов» - DateTime считается либо универсальным, локальным или не указано, причем некуда сохранить конкретное смещение.

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

1 голос
/ 09 февраля 2015

Msdn для настроек формата: https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.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

0 голосов
/ 27 октября 2011

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

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

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

0 голосов
/ 27 октября 2011

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

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