获取昨天在Clojure的约会

时间:2017-04-06 10:09:38

标签: date clojure

我需要以YYYY-MM-DD格式获取昨天的日期(不是基于用户,而是相对于服务器)。

在Clojure中实现这一目标的最佳方法是什么?

4 个答案:

答案 0 :(得分:5)

使用Java 8 Time API:

(require '[java-time :as t])

(def yesterday (t/minus (t/local-date)
                        (t/days 1)))

(t/format "yyyy-MM-dd" yesterday)
;; => "2017-04-05"

或使用Java 8 Time API Clojure包装器:clojure.java-time

/* thread.c */
#define _GNU_SOURCE
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <sched.h>

void readlink_my(const char* when)
{
    char buf[100];
    int len = readlink("/proc/self/root", buf, sizeof(buf));
    buf[len] = '\0';
    printf("%s: %s\n", when, buf);
}

void *first_func(void * ptr)
{
    readlink_my("before unshare()..");
    if(unshare(CLONE_NEWNS) == -1)
        perror("error in unshare()..\n");
    readlink_my("after unshare()..");
    return NULL;
}

int main()
{
    pthread_t first_t;
    pthread_create(&first_t, NULL, first_func, NULL);
    pthread_join(first_t, NULL);
    return 0;
}

答案 1 :(得分:4)

clj-time

(t/minus (t/now) (t/days 1))

答案 2 :(得分:3)

First require these in your clj file.

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

The below code is self-explanatory. But don't use so many defs.

;;To Create Yesterday's date    
(def yesterday 
     (t/minus (t/now) (t/days 1)))

;; To format as YYYY-MM-DD
(def custom-formatter (f/formatter "yyyy-MM-dd"))
(def output-time 
     (f/unparse custom-formatter yesterday))

Here is a more functional way:

(defn yesterday []
   (let [yesterday-date (t/minus (t/now) (t/days 1))
         custom-formatter (f/formatter "yyyy-MM-dd")]
      (f/unparse custom-formatter yesterday-date)))

And then do a function call (yesterday).

For further reads on clj-time refer documentation.

答案 3 :(得分:0)

不需要clj-time ...

(let [today (.format 
               (java.text.SimpleDateFormat. "yyyyMMdd") 
                   (new java.util.Date))
      yesterday (.format 
                  (java.text.SimpleDateFormat. "yyyyMMdd") 
                     (new java.util.Date 
                       (- (System/currentTimeMillis) (* 24 60 60 1000))))]
   (println "today: " today)
   (println "yesterday: " yesterday))
相关问题