我需要以YYYY-MM-DD
格式获取昨天的日期(不是基于用户,而是相对于服务器)。
在Clojure中实现这一目标的最佳方法是什么?
答案 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)
(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))