c# Parsing UTC datetime

后端 未结 4 1062
有刺的猬
有刺的猬 2020-12-16 12:57

I am trying to parse 11/23/2011 23:59:59 UTC +0800 as a c# datetime object but trying the standard datetime parse method or even the datetime exact parse I get invalid date.

相关标签:
4条回答
  • 2020-12-16 13:17

    As written by James, you can try

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

    You'll get a date in the "local" time.

    0 讨论(0)
  • 2020-12-16 13:30

    I think you need to use ParseExact http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

    0 讨论(0)
  • 2020-12-16 13:32

    I would suggest you parse to a DateTimeOffset instead of a DateTime, as recommended in MSDN when using a time zone offset specifier in the format string:

    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);
        }
    }
    

    You can then convert that to a DateTime value in UTC if you want, but there's no such thing as "a DateTime with an offset of 8 hours" - a DateTime is either regarded as universal, local or unspecified, with nowhere for a specific offset to be stored.

    DateTime is a curious type in various ways, and can cause problems for the unwary developer.

    0 讨论(0)
  • 2020-12-16 13:37

    Msdn for Format settings: 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 = "ffffd 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")));
        }
    }
    

    for extension method:

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

    For test: https://dotnetfiddle.net/xdnjGy

    0 讨论(0)
提交回复
热议问题