Justification: À mes yeux un timestamp, c'est exactement cela: Un point dans le temps. Ce peuvent être représentées avec précision un objet. Si vous avez besoin d'autre chose, une valeur scalaire, par exemple, de secondes depuis l'époque Unix, de 100 ns intervalles, depuis 1601 ou peut-être une chaîne de caractères à des fins d'affichage ou de stockage de l'horodatage dans une base de données, vous pouvez facilement obtenir que de l'objet. Mais cela dépend beaucoup de l'usage prévu.
Dire que la »vraie timestamp est le nombre de secondes depuis l'époque Unix)« est un peu à côté de la question, comme c'est un façon de représenter un point dans le temps, mais il a également besoin d'informations supplémentaires à même de savoir que vous avez affaire à une heure et non un nombre. Un Time objet résout ce problème gentiment en représentant un point dans le temps et aussi être plus explicite sur ce qu'il est.
Qui donne à l'objet de temps, vous devriez de Temps.maintenant.to_i pour un vrai timestamp
Dans mon opninion un objet est timestampy suffisant et que vous avez encore toute la liberté dont vous avez besoin. En la réduisant à une valeur scalaire est dans la plupart des cas, pas vraiment nécessaire.
Les horodatages sont par rapport à l'époque -- n'importe quel fuseau horaire vous êtes dans. manzhikov la réponse est la meilleure.
Ce post répond à l'OP question.
Alors qu'une belle explication de pourquoi ne pas utiliser un timestamp unix, cela ne veut pas répondre à l'OP question (ni la même question que j'ai eu quand j'ai trouvé ce post). Les timestamps Unix sont nécessaires dans de nombreux cas (par exemple, pour les Api). Même après l'explication, cette réponse ne donne pas de véritable moyen d'obtenir le timestamp.
à aucun moment, la question mentionne un timestamp Unix. Je viens de continuer à obtenir des downvotes pour répondre à cette question parce que les gens semblent penser que »timestamp == Unix time«, d'où l'explication.
Je ne peux que supposer que vous êtes obtenir downvotes parce que la plupart des développeurs probablement trouvé cette question à travers une recherche et de lire comment obtenir un timestamp unix, et donc considérer que c'est mal. Je pense que vous obtenez moins de downvotes (et de toujours garder votre point de vue) si vous venez d'ajouter un peu d'additif à votre réponse précisant à l'aide de to_i pour obtenir le timestamp unix si un timestamp unix a été souhaitée. Je voudrais résilier mon downvote avec qui. 🙂
un horodatage est un temps tampon, pas temps. Il est utilisé pour l'enregistrement dans une base de données, y compris un nom de fichier, d'impression sur un rapport ou une page web, etc. Il n'est pas un objet en mémoire. Ce n'est pas un temps tampon. L'image d'un timbre en caoutchouc qui s'adaptent à afficher la date & temps, et que vous les tremper dans l'encre et ensuite les appliquer à un morceau de papier. Un système électronique de tampon est l'équivalent métaphorique.
L'utilisation prévue encore dicte ce que vous avez besoin, alors. De l'enregistrement dans une base de données a besoin d'un objet Date (au moins si l'API de l'accès à cette base de données est tout bon), en mettant dans un nom de fichier a besoin d'un ISO 8601 chaîne, comme le font la date/temps sur des rapports ou des pages web. La plupart des gens ici apparemment envie de secondes depuis l'époque Unix. Qui est inutilisable pour les scénarios décrits ainsi.
Il y a aussi Time.now.utc qui est de 3 caractères plus court et un peu plus facile à lire.
Si l'OP voulait dire "timestamp" pour indiquer le nombre de secondes écoulées depuis l'époque, la question elle-même est inutile, car le mot "UTC" est redondante. Soit c'est la bonne réponse ou la question est sans réponse sans raffinement.
timestamp n'est pas liée à la durée de la zone. En d'autres termes, l'horodatage est UTC.
En fait, ce n'est pas tout à fait exact non plus. Un horodatage n'a même pas de représenter n'importe quel fuseau horaire, "timestamp est UTC" est vrai, comme autant "d'horodatage est caca d'éléphant". Le problème est dans la représentation. La plupart des développeurs de la représenter comme Unix time stamp (qui n'indique pas l'heure UTC ou de tout autre fuseau horaire que c'est juste une valeur entière).
Quoi bon un timestamp avec sa granularité donné en secondes? Je trouve ça beaucoup plus pratique de travail avec le Temps.maintenant.to_f. Heck, vous pouvez même jeter un to_s.sub('.',") pour se débarrasser de la virgule, ou d'effectuer un transtypage comme ceci: Integer(1e6*Temps.maintenant.to_f).
La bonne façon est de faire un Time.now.getutc.to_i obtenir la bonne timestamp montant que simplement afficher l'entier n'a pas besoin de toujours être le même que l'horodatage utc en raison des différences de fuseau horaire.
Tout le monde dit que, à la pourquoi il suffit de le copier, aucune nouvelle information, 3 ans de retard?
Et avec aucun signe de ponctuation qui ferait de la 1 phrase, qui est un peu trop long et n'est pas complètement correct syntaxiquement, plus claire.
Justification: À mes yeux un timestamp, c'est exactement cela: Un point dans le temps. Ce peuvent être représentées avec précision un objet. Si vous avez besoin d'autre chose, une valeur scalaire, par exemple, de secondes depuis l'époque Unix, de 100 ns intervalles, depuis 1601 ou peut-être une chaîne de caractères à des fins d'affichage ou de stockage de l'horodatage dans une base de données, vous pouvez facilement obtenir que de l'objet. Mais cela dépend beaucoup de l'usage prévu.
Dire que la »vraie timestamp est le nombre de secondes depuis l'époque Unix)« est un peu à côté de la question, comme c'est un façon de représenter un point dans le temps, mais il a également besoin d'informations supplémentaires à même de savoir que vous avez affaire à une heure et non un nombre. Un
Time
objet résout ce problème gentiment en représentant un point dans le temps et aussi être plus explicite sur ce qu'il est.Time.now.utc
qui est de 3 caractères plus court et un peu plus facile à lire.Vous pouvez utiliser:
Time.now.to_i
.La mise en forme par défaut n'est pas très utile, à mon avis. Je préfère ISO8601 que c'est triable, relativement compact et largement reconnu:
/usr/share/ruby/2.0/time.rb
.Généralement timestamp n'a pas de fuseau horaire.
to_f
sera mieuxQuoi bon un timestamp avec sa granularité donné en secondes? Je trouve ça beaucoup plus pratique de travail avec le Temps.maintenant.to_f. Heck, vous pouvez même jeter un to_s.sub('.',") pour se débarrasser de la virgule, ou d'effectuer un transtypage comme ceci: Integer(1e6*Temps.maintenant.to_f).
Time.utc(2010, 05, 17)
si vous avez besoin d'un lisible par l'homme d'horodatage (comme les rails de la migration a) ex. "20190527141340"
time = Time.zone.now()
Il fonctionnera comme
La bonne façon est de faire un
Time.now.getutc.to_i
obtenir la bonne timestamp montant que simplement afficher l'entier n'a pas besoin de toujours être le même que l'horodatage utc en raison des différences de fuseau horaire.