Я почти уверен, что это проблема часового пояса, как уже указывал Carcigenicate.from-string
анализирует строку в часовом поясе UTC, а java.sql.Date использует часовой пояс JVM по умолчанию.Возвращенный результат верен, если вы находитесь в часовом поясе, который находится «за» UTC (на западе), потому что в этих часовых поясах дата 2018-09-28 00:00:00 фактически является 2017-09-27.
(java.util.TimeZone/setDefault(java.util.TimeZone/getTimeZone "GMT"))
(.toString (tc/to-sql-date (tc/from-string "2018-09-28")))
;; => "2018-09-28"
(java.util.TimeZone/setDefault(java.util.TimeZone/getTimeZone "GMT-1"))
(.toString (tc/to-sql-date (tc/from-string "2018-09-28")))
;; => "2018-09-27"
Вы не должны использовать java.sql.Date и ожидать, что он возвращает дату в часовом поясе UTC, если это не ваш часовой пояс по умолчанию.