Pour votre information, les classes date de temps anciens gênants tels que java.util.Date, java.util.Calendaret Timestampsont maintenant héritage, supplanté par les java.time classes. La plupart des fonctionnalités java.time sont rétroportées vers Java 6 et Java 7 dans le projet ThreeTen-Backport . Adapté davantage pour les versions antérieures d'Android dans le projet ThreeTenABP . Voir Comment utiliser ThreeTenABP… .
Basil Bourque
Réponses:
300
La solution est:
Long tsLong =System.currentTimeMillis()/1000;String ts = tsLong.toString();
Cela ne tient pas compte du décalage de fuseau horaire de l'appareil.
kjdion84
1
@ kjdion84 excusez-moi, mais pourquoi pensez-vous que ce serait important? Juste basé sur la question.
Cԃ ա ԃ
82
Du blog des développeurs:
System.currentTimeMillis()est l'horloge "murale" standard (heure et date) exprimant les millisecondes depuis l'époque. L'horloge murale peut être réglée par l'utilisateur ou le réseau téléphonique (voir setCurrentTimeMillis (long) ), de sorte que l'heure peut reculer ou avancer de façon imprévisible. Cette horloge ne doit être utilisée que lorsque la correspondance avec des dates et des heures réelles est importante, comme dans un calendrier ou une application de réveil. Les mesures d'intervalle ou de temps écoulé doivent utiliser une horloge différente. Si vous utilisez System.currentTimeMillis(), envisagez l' écoute de la ACTION_TIME_TICK, ACTION_TIME_CHANGEDet les ACTION_TIMEZONE_CHANGEDémissions intention de savoir quand le temps change.
De developer.android.com/reference/java/lang/… j'ai trouvé que System.nanoTime()c'est une alternative à System.currentTimeMillis()et il n'a pas de fluctuations imprévisibles, et est conçu pour mesurer les différences de durée.
Bianca Daniciuc
2
@ ana01 "la valeur zéro correspond généralement au dernier démarrage de l'appareil" - elle ne peut donc être utilisée que lorsque vous comparez les différences de durée sur le même appareil. Pas utile pour le stockage de base de données par exemple.
Michał K
1
Juste une note au commentaire de @ ana01 qui System.nanoTime()ne convient pas pour afficher l'heure de l'horloge murale. À cette fin, utilisez System.currentTimeMillis()plutôt.
Akash Agarwal
33
1320917972 est l'horodatage Unix utilisant le nombre de secondes depuis 00:00:00 UTC le 1er janvier 1970. Vous pouvez utiliser la TimeUnitclasse pour la conversion d'unité - de System.currentTimeMillis()à secondes.
Voici un horodatage lisible par l'homme qui peut être utilisé dans un nom de fichier, juste au cas où quelqu'un aurait besoin de la même chose que celle dont j'avais besoin:
package com.example.xyz;import android.text.format.Time;/**
* Clock utility.
*/publicclassClock{/**
* Get current time in human-readable form.
* @return current time as a string.
*/publicstaticString getNow(){Time now =newTime();
now.setToNow();String sTime = now.format("%Y_%m_%d %T");return sTime;}/**
* Get current time in human-readable form without spaces and special characters.
* The returned value may be used to compose a file name.
* @return current time as a string.
*/publicstaticString getTimeStamp(){Time now =newTime();
now.setToNow();String sTime = now.format("%Y_%m_%d_%H_%M_%S");return sTime;}}
Hé, pourriez-vous également indiquer la meilleure façon de trier une liste d'horodatages? Je pensais à les trier moi-même mais j'ai pensé qu'il pourrait y avoir une meilleure façon.
Abbas
Pour référence future pour tous ceux qui liront ceci, sachez que "android.text.format.Time" est désormais obsolète
Bien que la division par 1000 ne soit pas une surprise pour beaucoup, faire vos propres conversions de temps peut être difficile à lire assez rapidement, donc c'est une mauvaise habitude de prendre quand vous pouvez l'éviter.
La Instantclasse que j'utilise fait partie de java.time, l'API Java moderne de date et d'heure. Il est intégré aux nouvelles versions d'Android, API niveau 26 et plus. Si vous programmez pour un ancien Android, vous pouvez obtenir le backport, voir ci-dessous. Si vous ne voulez pas le faire, il est compréhensible que j'utilise toujours une conversion intégrée:
C'est la même chose que la réponse de sealskej. La sortie est la même qu'avant.
Question: Puis-je utiliser java.time sur Android?
Oui, java.time fonctionne bien sur les appareils Android plus anciens et plus récents. Il nécessite juste au moins Java 6 .
Dans Java 8 et versions ultérieures et sur les appareils Android plus récents (à partir du niveau 26 de l'API), l'API moderne est intégrée.
Dans les versions non Android de Java 6 et 7, obtenez le ThreeTen Backport, le backport des nouvelles classes (ThreeTen for JSR 310; voir les liens en bas).
Sur (plus ancien) Android, utilisez l'édition Android de ThreeTen Backport. Cela s'appelle ThreeTenABP. Et assurez-vous d'importer les classes de date et d'heure org.threeten.bpavec des sous-packages.
Réponse presque parfaite (j'ai voté positivement) mais, au moins à mon avis, vous devriez supprimer la référence ThreeTen Backport car il s'agit d'une question sur Android et non sur Java en général. Et cela peut être déroutant pour les débutants sur Android.
Slobodan Antonijević
1
@ SlobodanAntonijević Il est important pour les programmeurs Android de comprendre que (a) s'ils prennent en charge Android 26 et versions ultérieures, ils ont une implémentation de java.time intégrée, (b) s'ils prennent en charge Android tôt avant 26, ils doivent ajouter une bibliothèque , la bibliothèque ThreeTenABP , et (c) si vous utilisez ThreeTenABP , sachez que cette bibliothèque est en fait une adaptation de ThreeTen-Backport adaptée de Java à Android. La bibliothèque ThreeTenABP est juste un wrapper spécifique à Android autour de la bibliothèque ThreeTen-Backport . Voir ce tableau graphique comparant les 3 bibliothèques.
Basil Bourque
@BasilBourque vous avez tout à fait raison. Mais, vous pouvez en fait importer ThreeTen-Backport et l'utiliser dans une application Android, mais avec un impact extrêmement énorme sur les performances en raison de sa dépendance JAR. C'est pourquoi j'ai dit que la publication devrait être plus précise que les développeurs Android ne devraient jamais utiliser ThreeTen-Backport, et utiliser à la place ThreeTenABP pour le support de l'API 25 et inférieur. J'ai vu de nombreux développeurs sur diverses cartes qui se confondent sur celui qui devrait être utilisé pour Android, car ils semblent similaires par leur nom.
Slobodan Antonijević
Bon point, @ SlobodanAntonijević. J'ai essayé de le rendre un peu plus clair.
Ole VV
1
@ SlobodanAntonijević Ce tableau indiquant où obtenir java.time pour Java et Android pourrait aider à le clarifier.
Basil Bourque
3
Solution dans Kotlin:
val nowInEpoch =Instant.now().epochSecond
Assurez-vous que votre version minimale du SDK est 26.
Ce code est la version Kotlin. J'ai une autre idée d'ajouter un entier aléatoire au dernier chiffre pour donner le temps de l'époque de la variance.
Version Kotlin
val randomVariance =(0..100).shuffled().first()
val currentEpoch =(System.currentTimeMilis()/1000)+ randomVariance
val deltaEpoch = oldEpoch - currentEpoch
Je pense qu'il vaudra mieux utiliser ce kode puis dépendre de la version Android 26 ou plus
java.util.Date
,java.util.Calendar
etTimestamp
sont maintenant héritage, supplanté par les java.time classes. La plupart des fonctionnalités java.time sont rétroportées vers Java 6 et Java 7 dans le projet ThreeTen-Backport . Adapté davantage pour les versions antérieures d'Android dans le projet ThreeTenABP . Voir Comment utiliser ThreeTenABP… .Réponses:
La solution est:
la source
Du blog des développeurs:
System.currentTimeMillis()
est l'horloge "murale" standard (heure et date) exprimant les millisecondes depuis l'époque. L'horloge murale peut être réglée par l'utilisateur ou le réseau téléphonique (voir setCurrentTimeMillis (long) ), de sorte que l'heure peut reculer ou avancer de façon imprévisible. Cette horloge ne doit être utilisée que lorsque la correspondance avec des dates et des heures réelles est importante, comme dans un calendrier ou une application de réveil. Les mesures d'intervalle ou de temps écoulé doivent utiliser une horloge différente. Si vous utilisezSystem.currentTimeMillis()
, envisagez l' écoute de laACTION_TIME_TICK
,ACTION_TIME_CHANGED
et lesACTION_TIMEZONE_CHANGED
émissions intention de savoir quand le temps change.la source
System.nanoTime()
c'est une alternative àSystem.currentTimeMillis()
et il n'a pas de fluctuations imprévisibles, et est conçu pour mesurer les différences de durée.System.nanoTime()
ne convient pas pour afficher l'heure de l'horloge murale. À cette fin, utilisezSystem.currentTimeMillis()
plutôt.1320917972 est l'horodatage Unix utilisant le nombre de secondes depuis 00:00:00 UTC le 1er janvier 1970. Vous pouvez utiliser la
TimeUnit
classe pour la conversion d'unité - deSystem.currentTimeMillis()
à secondes.la source
Vous pouvez utiliser la classe SimpleDateFormat :
la source
Utilisez la méthode ci-dessous pour obtenir l'horodatage actuel. Ça fonctionne bien pour moi.
la source
C'est une utilisation simple:
si vous le voulez dans un format particulier, vous avez besoin d'un formateur comme ci-dessous
la source
Voici un horodatage lisible par l'homme qui peut être utilisé dans un nom de fichier, juste au cas où quelqu'un aurait besoin de la même chose que celle dont j'avais besoin:
la source
Essayez ces
et timeStamp au format de l'heure
la source
java.time
Je voudrais apporter la réponse moderne.
Sortie lors de l'exécution tout à l'heure:
Bien que la division par 1000 ne soit pas une surprise pour beaucoup, faire vos propres conversions de temps peut être difficile à lire assez rapidement, donc c'est une mauvaise habitude de prendre quand vous pouvez l'éviter.
La
Instant
classe que j'utilise fait partie de java.time, l'API Java moderne de date et d'heure. Il est intégré aux nouvelles versions d'Android, API niveau 26 et plus. Si vous programmez pour un ancien Android, vous pouvez obtenir le backport, voir ci-dessous. Si vous ne voulez pas le faire, il est compréhensible que j'utilise toujours une conversion intégrée:C'est la même chose que la réponse de sealskej. La sortie est la même qu'avant.
Question: Puis-je utiliser java.time sur Android?
Oui, java.time fonctionne bien sur les appareils Android plus anciens et plus récents. Il nécessite juste au moins Java 6 .
org.threeten.bp
avec des sous-packages.Liens
java.time
.java.time
été décrit pour la première fois.java.time
Java 6 et 7 (ThreeTen pour JSR-310).la source
Solution dans Kotlin:
Assurez-vous que votre version minimale du SDK est 26.
la source
Je suggère d'utiliser la réponse de Hits, mais en ajoutant un format de paramètres régionaux, voici comment les développeurs Android recommandent :
la source
Ce code est la version Kotlin. J'ai une autre idée d'ajouter un entier aléatoire au dernier chiffre pour donner le temps de l'époque de la variance.
Version Kotlin
Je pense qu'il vaudra mieux utiliser ce kode puis dépendre de la version Android 26 ou plus
la source