2010-04-21 3 views
7

Fondamentalement, je veux faire ci-dessous dans. NET mais je n'ai aucune idée de comment.new Date(). GetTime() dans .NET

var d = new Date().getTime() + " milliseconds since 1970/01/01" 
+0

BTW étroitement liée à ... http://stackoverflow.com/questions/906034/calculating-future-epoch-time-in-c – cyberzed

+2

Les 6 réponses Je vois y compris celui que vous avez accepté utilise DateTime.Now au lieu de DateTime.UtcNow. Je crois que cela se traduira par une erreur de calcul de plus de 3 600 000 millisecondes par rapport à la moitié de l'année aux États-Unis. Cet écart peut ne pas importer dans votre cas particulier, mais quelque chose à savoir. – JasDev

+1

En fait, à l'heure locale aux États-Unis, l'erreur sera toujours plus importante, car peu importe si l'heure d'été est active ou non, tous les fuseaux horaires sont loin de GMT/UTC. Donc, vous avez raison, il faut * utiliser * DateTime.UtcNow. –

Répondre

5

Tu ferais quelque chose comme ça ...

var ts = DateTime.UtcNow - new DateTime(1970,1,1); 
var result = String.Format("{0} milliseconds since 1970/01/01", ts.TotalMilliseconds); 
+0

Merci! J'ai complètement oublié la soustraction. Je ne pouvais pas trouver TotalMilliseconds et était coincé en millisecondes. –

+2

Je veux juste noter que vous devriez également utiliser les temps UTC. –

9

Je ne suis pas vraiment sûr que vous pouvez obtenir une date UNIX dans .NET, mais vous avez DateTime.Now comme equvivalent de new Date() (ou new DateTime())

Comme vous obtenu dans le commentaire, il est possible d'obtenir un objet TimeSpan par doning quelque chose dans les lignes de ...

(première réponse)

DateTime.Now.Subtract(new DateTime(1970,1,1)).TotalMilliseconds 

Ajout du résultat final pour le bien de l'humanité ...

var d = DateTime.Now.Subtract(new DateTime(1970,1,1).ToUniversalTime()).TotalMilliseconds + " milliseconds since 1970/01/01"; 

P.S. Où est Jon Skeet avec sa connaissance du moment où l'on a besoin de lui: P

+3

Aime le cri de guerre John Skeet de l'aide: D – Arcturus

+2

Je veux juste noter que vous devriez également convertir en UTC –

1

Vous pouvez y accéder via les structures DateTime et TimeSpan via DateTime.Subtract, quelque chose comme:

TimeSpan ts = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)); 
ts.TotalMilliseconds; // ...since The Epoch 
+1

Vous devriez probablement utiliser 'DateTime.UtcNow' ou bien convertir l'heure en UTC avant d'effectuer la soustraction. –

+0

@Daniel: Vous avez raison, corrigé. –

-1
DateTime dt = new DateTime(); 
dt = DateTime.Now; 
TimeSpan dtNow = new TimeSpan(); 
dtNow = dt.Subtract(new DateTime(1970, 1, 1)); 
Console.WriteLine(dtNow.TotalMilliseconds); 

Bit longue haleine par rapport aux autres, mais cela fonctionne.

+0

Vous devriez utiliser 'DateTime.UtcNow' ou appeler' dt.ToUniversalTime() '. En outre, vous avez deux appels de constructeur qui sont superflus. –

+0

Merci d'avoir signalé cela. : o) –

2

J'ai écrit une méthode d'extension pour moi-même tout à l'heure.

Il est utilisé comme ceci:

double ticks = DateTime.UtcNow.UnixTicks(); 

Mise en œuvre:

public static class ExtensionMethods 
{ 
    // returns the number of milliseconds since Jan 1, 1970 
       // (useful for converting C# dates to JS dates) 
    public static double UnixTicks(this DateTime dt) 
    { 
    DateTime d1 = new DateTime(1970, 1, 1); 
    DateTime d2 = dt.ToUniversalTime(); 
    TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks); 

    return ts.TotalMilliseconds; 
    } 
} 
+0

Votre exemple ne compilera pas. Peut-être que vous vouliez dire 'ticks doubles = DateTime.UtcNow.UnixTicks();'? –

+0

Oui - merci, je pense que j'étais coincé en Javascript! –

0

Que diriez-vous

var s = string.format("{0} milliseconds since 1970/01/01", 
      (DateTime.Now - DateTime.Parse("1970/01/01")).TotalMilliseconds); 
+0

Pourquoi coder en dur la date sous forme de chaîne? En outre, vous devriez vraiment faire le calcul en UTC. –

2

Soustraction est la façon de le faire, mais toutes les réponses que j'ai vu jusqu'à présent, ne pas ajuster correctement pour UTC.

Vous voulez quelque chose comme:

var ts = DateTime.UtcNow - new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc); 
var result = String.Format("{0} milliseconds since 1970/01/01", ts.TotalMilliseconds);