У меня есть переменная даты рождения в моей программе в формате «1954-09-15». Как я могу найти возраст этого человека, используя эту дату рождения?Как рассчитать возраст с даты рождения в clojure?
ответ
В Clojure принято использовать clj-time
для обработки, связанной со временем. Но если вы не хотите тянуть дополнительную зависимость, вы можете использовать java.time
для своей проблемы. Вы должны понимать Java interop от Clojure, хотя, поскольку вы будете использовать библиотеку Java через Clojure.
Сначала вам необходимо импортировать необходимые зависимости java через import
.
Внутри функции age
вы создаете date-formatter
для шаблона, что ваша входная строка (дата рождения человека) имеет - в данном случае это "yyyy-MM-dd"
.
Затем вы проанализируете ввод с помощью созданного date-formatter
, чтобы создать объект LocalDate
.
После этого вы создаете еще один объект LocalDate
, который содержит время на момент выполнения.
В конце вы вычисляете разницу между двумя созданными объектами LocalDate
, выраженными в годах (`ChronoUnit/YEARS ').
(ns age-of-person.core
(:import (java.time LocalDate
format.DateTimeFormatter
Year
temporal.ChronoUnit)))
(defn age [birthdate]
(let [date-formatter (DateTimeFormatter/ofPattern "yyyy-MM-dd")
birthdate (LocalDate/parse birthdate date-formatter)
now (LocalDate/now)
age (.until birthdate now ChronoUnit/YEARS)]
age))
Вызов метода age
будет выглядеть следующим образом:
age-of-person.core=> (age "1954-09-15")
62
http://stackoverflow.com/questions/19521146/calculate-age-based-on-date-of-birth – Pramitha
мне нужно результат в языке clojure (в годах) – user123
Вы искали в использовании clj-time https://github.com/clj-time/clj-time – Scott