Fondamentalement, je veux faire le ci-dessous dans .NET mais je ne sais pas comment.
var d = new Date().getTime() + " milliseconds since 1970/01/01"
8 Réponses :
Je ne suis pas vraiment sûr que vous puissiez obtenir une date UNIX dans .NET, mais vous avez DateTime.Now comme un équivalent de nouvelle date () (ou nouvelle datetime ())
Comme vous l'avez eu dans le commentaire, Il est possible d'obtenir un objet Timespan en faisant quelque chose dans les lignes de ... p>
(première réponse) p> Ajout du résultat final pour le saké de l'humanité ... p> ps Où est Jon Skeet avec sa connaissance du temps où nous avons besoin de lui: p p> p>
Aimez le cri de la bataille de John Skeet pour l'aide: D
Je veux juste noter que vous devriez également convertir en UTC
Vous feriez 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);
Merci! J'ai complètement oublié la soustraction. Je ne pouvais pas trouver totaleMillisecondes et était coincé à des millisecondes.
Je veux juste noter que vous devez également utiliser UTC Times.
Donc, après 10 ans, nous utilisons toujours Nouvelle DateTime (1970,1,1) code> ??
Vous pouvez y arriver via le DateTime code> et tispan code> structures via DateTime.Subrer code> , quelque chose comme:
TimeSpan ts = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)); ts.TotalMilliseconds; // ...since The Epoch
Vous devriez probablement utiliser DateTime.utcnow code> ou convertir le temps en UTC avant de faire la soustraction.
DateTime dt = new DateTime(); dt = DateTime.Now; TimeSpan dtNow = new TimeSpan(); dtNow = dt.Subtract(new DateTime(1970, 1, 1)); Console.WriteLine(dtNow.TotalMilliseconds); Bit long-winded in comparison to others, but it works.
Vous devriez utiliser dentetime.utcnow code> ou d'autre appel dt.touniversaltime () code>. En outre, vous avez deux appels de constructeur qui sont superflus.
J'ai écrit une méthode d'extension pour moi-même un moment de retour.
Il est utilisé comme: p> implémentation: p> 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;
}
}
Votre exemple ne compilera pas. Peut-être que vous vouliez dire double ticks = DateTime.utcnow.unixticks (); code>?
Que diriez-vous de
var s = string.format("{0} milliseconds since 1970/01/01",
(DateTime.Now - DateTime.Parse("1970/01/01")).TotalMilliseconds);
Pourquoi codez-vous la date d'une chaîne? En outre, vous devriez vraiment faire le calcul dans UTC.
La soustraction est la meilleure façon de le faire, mais toutes les réponses que j'ai vues jusqu'à présent ne s'adaptent pas correctement pour UTC.
Vous voulez quelque chose comme: p>
Je rigolais et j'ai vu cet exemple, mais j'ai fini par la modifier à ce sujet:
var st = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).ToFileTimeUtc();
var t = (DateTime.UtcNow.ToFileTimeUtc());
Debug.WriteLine(t - st);
BTW étroitement lié à ... Stackoverflow.com / Questions / 906034 / ...
Les 6 réponses que je vois, y compris celle que vous avez acceptée utilise DateTime.now au lieu de DateTime.utcnow. Je crois que cela entraînera votre calcul d'être incorrect de + 3 600 000 millisecondes de plus de la moitié de l'année aux États-Unis. Cette divergence peut ne pas importer dans votre cas particulier, mais quelque chose à conscience de.
En fait, au sein des heures locales aux États-Unis, l'erreur sera définitive plus que celle-ci, comme si le DST est actif ou non, tous les fuseaux de Timezones sont loin de GMT / UTC. Donc, vous avez raison, un doit I> utiliser denttime.utcnow.