100 votes

Comment puis-je formater le format DateTime to web UTC ?

J'ai une DateTime que je veux formater en "2009-09-01T00:00:00.000Z", mais le code suivant me donne "2009-09-01T00:00:00.000+01:00" (les deux lignes) :

new DateTime(2009, 9, 1, 0, 0, 0, 0, DateTimeKind.Utc).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffzzz")
new DateTime(2009, 9, 1, 0, 0, 0, 0, DateTimeKind.Utc).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffzzz")

Des idées pour que ça marche ?

190voto

LukeH Points 110965
string foo = yourDateTime.ToUniversalTime()
                         .ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");

26voto

arviman Points 1663
string.Format("{0:yyyy-MM-ddTHH:mm:ss.FFFZ}", DateTime.UtcNow)

renvoie 2017-02-10T08:12:39.483Z

9voto

user3228938 Points 155

Certaines personnes ont souligné que « ToUniversalTime » est quelque peu dangereux en ce sens qu'il peut causer des délais incorrects involontaires. En développant cela, je vous donne un exemple plus détaillé d'une solution. L'exemple ici crée une extension à l'objet DateTime qui renvoie en toute sécurité une DateTime UTC où vous pouvez utiliser ToString comme vous le souhaitez….

class Program
{
    static void Main(string[] args)
    {
        DateTime dUtc = new DateTime(2016, 6, 1, 3, 17, 0, 0, DateTimeKind.Utc);
        DateTime dUnspecified = new DateTime(2016, 6, 1, 3, 17, 0, 0, DateTimeKind.Unspecified);

        //Sample of an unintended mangle:
        //Prints "2016-06-01 10:17:00Z"
        Console.WriteLine(dUnspecified.ToUniversalTime().ToString("u"));

        //Prints "2016 - 06 - 01 03:17:00Z"
        Console.WriteLine(dUtc.SafeUniversal().ToString("u"));

        //Prints "2016 - 06 - 01 03:17:00Z"
        Console.WriteLine(dUnspecified.SafeUniversal().ToString("u"));
    }
}

public static class ConvertExtensions
{
    public static DateTime SafeUniversal(this DateTime inTime)
    {
        return (DateTimeKind.Unspecified == inTime.Kind)
            ? new DateTime(inTime.Ticks, DateTimeKind.Utc)
            : inTime.ToUniversalTime();
    }
}

7voto

Carlos Beppler Points 86

Le meilleur format à utiliser est "aaaa" - 'MM' - 'dd' T'T'HH' : 'mm' : 'ss'.'fffK ".

Le dernier K sur la chaîne sera changé en 'Z' si la date est UTC ou avec le fuseau horaire (+ -hh :mm) si est local. (http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx)

Comme l'a dit LukeH, il est bon d'utiliser le ToUniversalTime si vous voulez que toutes les dates soient UTC.

Le code final est :

string foo = yourDateTime.ToUniversalTime()
                         .ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X