diff --git a/cmd/Kconfig b/cmd/Kconfig
index a2b9e19bbe6d8936a0117a3908a26d2813d60c29..bc8318d7fa47202d06e588719c0402df0810d4b4 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -1625,6 +1625,7 @@ config CMD_LED
 config CMD_DATE
 	bool "date"
 	default y if DM_RTC
+	select LIB_DATE
 	help
 	  Enable the 'date' command for getting/setting the time/date in RTC
 	  devices.
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 8778cc7b264ca4f4785e41d66338bac5421f7274..89e71cc7ebef5fd75abd4c4c6360b03ad4997508 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -7,6 +7,7 @@ menu "Real Time Clock"
 config DM_RTC
 	bool "Enable Driver Model for RTC drivers"
 	depends on DM
+	select LIB_DATE
 	help
 	  Enable drver model for real-time-clock drivers. The RTC uclass
 	  then provides the rtc_get()/rtc_set() interface, delegating to
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index f97a6699820e791f6ae4cbfa0ffd85833883e1c1..e8875ce10f5ed53926fbeefab04b2fae1a29d34f 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -7,7 +7,6 @@
 obj-$(CONFIG_$(SPL_TPL_)DM_RTC) += rtc-uclass.o
 
 obj-$(CONFIG_RTC_AT91SAM9_RTT) += at91sam9_rtt.o
-obj-y += date.o
 obj-y += rtc-lib.o
 obj-$(CONFIG_RTC_DAVINCI) += davinci.o
 obj-$(CONFIG_RTC_DS1302) += ds1302.o
diff --git a/lib/Kconfig b/lib/Kconfig
index 55dedcbcdd2b1373a8643d93891dc57831e65714..2c018cb096b2b398608e6fc568f7cfea43932051 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -574,4 +574,7 @@ config TEST_FDTDEC
 	bool "enable fdtdec test"
 	depends on OF_LIBFDT
 
+config LIB_DATE
+	bool
+
 endmenu
diff --git a/lib/Makefile b/lib/Makefile
index e15a189f65ba1f6d45e40c5582a23d011290fb02..90d4425bd6717fd272d7e91432321a2e7b693c3b 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -117,4 +117,6 @@ else
 obj-y += vsprintf.o strto.o
 endif
 
+obj-y += date.o
+
 subdir-ccflags-$(CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED) += -O2
diff --git a/drivers/rtc/date.c b/lib/date.c
similarity index 96%
rename from drivers/rtc/date.c
rename to lib/date.c
index c57317d2c267824b4c4a7f39a62e6918da98bd90..63af4a142612520d728911bd30baedb4e407301d 100644
--- a/drivers/rtc/date.c
+++ b/lib/date.c
@@ -9,8 +9,7 @@
 #include <errno.h>
 #include <rtc.h>
 
-#if defined(CONFIG_CMD_DATE) || defined(CONFIG_DM_RTC) || \
-				defined(CONFIG_TIMESTAMP)
+#if defined(CONFIG_LIB_DATE) || defined(CONFIG_TIMESTAMP)
 
 #define FEBRUARY		2
 #define	STARTOFTIME		1970
@@ -97,4 +96,4 @@ unsigned long rtc_mktime(const struct rtc_time *tm)
 	return (hours * 60 + tm->tm_min) * 60 + tm->tm_sec;
 }
 
-#endif
+#endif /* CONFIG_LIB_DATE || CONFIG_TIMESTAMP */