45 votes

Quelle est la meilleure façon d'obtenir la date et l'heure en Clojure ?

J'ai besoin d'enregistrer des événements sur un scénario Clojure Client-Serveur, mais il me semble que Clojure ne fournit pas de fonction date/heure. Est-ce que quelqu'un peut le confirmer ou est-ce que j'ai raté quelque chose ? Si j'ai raison, je dois utiliser l'interopérabilité Java, n'est-ce pas ?

54voto

Goran Jovic Points 5882

Si tout ce dont vous avez besoin est d'obtenir l'heure et la date actuelles de votre enregistreur, alors cette fonction est correcte :

 (defn now [] (new java.util.Date))

Maintenant que vous en parlez, il serait utile d'avoir un support pour les objets Date immuables.

0 votes

Très bien, je pense que j'opterais pour (print (.getTime (now))) afin de préserver une précision raisonnable dans mes fichiers journaux. Merci de votre compréhension.

43 votes

(defn now [] (java.util.Date.)) est la version canonique.

36voto

Brad Koch Points 4046

Java 1.8 a ajouté la fonction java.time au JDK de base afin de nettoyer un grand nombre d'éléments de l'interface utilisateur. frustrations avec l'état de la date et de l'heure en Java. Étant donné que java.time fait désormais partie intégrante du noyau Java et que son API a été considérablement améliorée, je vous encourage à l'utiliser en priorité lorsque vous écrivez du nouveau code sur la date et l'heure.

Voici comment récupérer la date et l'heure actuelles :

(java.time.LocalDateTime/now)

17voto

RD1 Points 4458

Il existe un Bibliothèque Clojure-wrapper pour Joda-Time . Ou vous devrez utiliser l'interopérabilité Java avec l'API Java standard.

1 votes

Merci, mais je préfère garder mes dépendances aussi faibles que possible.

7 votes

@Ali - une bibliothèque de date-temps saine est une dépendance que vous devriez sérieusement envisager ; malheureusement, les bibliothèques standard (pour de nombreux langages) ne sont pas toujours suffisamment précises.

13voto

elf Points 609

Si vous n'avez pas besoin de quelque chose de plus avancé, utilisez simplement les classes Java.

(.format (java.text.SimpleDateFormat. "MM/dd/yyyy") (new java.util.Date))

12voto

Kenny Evitt Points 1876

Avec clj-time La bibliothèque Clojure qui enveloppe la bibliothèque Java Joda Time vous permet d'utiliser un code comme le suivant :

(require '[clj-time.core :as time])
(require '[clj-time.format :as time-format])

(time/now) => #<DateTime 2013-03-31T03:23:47.328Z>

(def time-formatter (time-format/formatters :basic-date-time))  ;; ISO 8601 UTC format
(time-format/unparse custom-formatter (date-time 2010 10 3)) => "20101003T000000.000Z"

L'un des avantages de Joda Time (et donc de clj-time) est que les nouvelles versions prennent en charge les nouveaux changements de fuseaux horaires.

1 votes

Cette bibliothèque est désormais obsolète

1 votes

@Agata Je n'utilise pas Clojure (ou Java) en ce moment, et ce depuis quelques années, mais j'ai penser c'est parce que Joda Time est également obsolète, et parce que ses fonctionnalités ont finalement été incorporées dans Java lui-même (IIRC).

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