{"id":2321,"date":"2015-11-08T14:22:24","date_gmt":"2015-11-08T14:22:24","guid":{"rendered":"http:\/\/davidkeen.com\/blog\/?p=2321"},"modified":"2025-10-23T10:17:24","modified_gmt":"2025-10-22T23:47:24","slug":"java-8-date-time-api-cheatsheet","status":"publish","type":"post","link":"https:\/\/davidkeen.com\/blog\/2015\/11\/java-8-date-time-api-cheatsheet\/","title":{"rendered":"Java 8 Date &#038; Time API Cheat Sheet"},"content":{"rendered":"\n<p>For a long time now the excellent <a href=\"http:\/\/www.joda.org\/joda-time\/\">Joda-Time<\/a> library has been the de facto date and time API for Java. Like <a href=\"http:\/\/www.slf4j.org\/\">SLF4J<\/a> or <a href=\"https:\/\/github.com\/google\/guava\">Guava<\/a> it is one of those dependencies that I seem to add by default to any new project but since the release of Java 8 users are asked to migrate to the new <span class=\"lang:default highlight:0 decode:true crayon-inline\">java.time<\/span> API. Finally Java has a date and time API it doesn&#8217;t need to be ashamed of.<\/p>\n\n\n\n<p>This new API is heavily influenced by the good design decisions of Joda-Time and much of its usage is similar but with years of writing Joda-Time code under my fingers I still find myself checking the new Javadoc from time to time for the subtle differences.<\/p>\n\n\n\n<p>Here is a short list of some common date\/time tasks using the new API. Interoperability with the old <span class=\"lang:default highlight:0 decode:true crayon-inline\">Date<\/span> class will often be a requirement for the near future so included are a couple of examples converting from <span class=\"lang:default highlight:0 decode:true crayon-inline\">java.util.Date<\/span> and <span class=\"lang:default highlight:0 decode:true crayon-inline\">java.sql.Date<\/span> to <span class=\"lang:default highlight:0 decode:true crayon-inline\">java.time<\/span>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Convert java.util.Date to java.time.ZonedDateTime\nDate now = new Date();\nZonedDateTime utc = ZonedDateTime.ofInstant(now.toInstant(), ZoneOffset.UTC);\nZonedDateTime auckland = ZonedDateTime.ofInstant(now.toInstant(), ZoneId.of(\"Pacific\/Auckland\"));\nZonedDateTime plusOne = ZonedDateTime.ofInstant(now.toInstant(), ZoneOffset.of(\"+1\"));\n\n\/\/ Convert java.time.ZonedDateTime to java.util.Date\nZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC);\nDate now = Date.from(utc.toInstant());\n\n\/\/ Convert java.time.ZonedDateTime to milliseconds from Epoch (java.util.Date#getTime)\nZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC);\nutc.toInstant.toEpochMilli();\n\n\/\/ Start of today\nZonedDateTime startOfToday = LocalDate.now().atStartOfDay(ZoneOffset.UTC);\n\n\/\/ Start of this week (Monday)\nZonedDateTime startOfWeek = LocalDate.now().atStartOfDay(ZoneId.of(\"Europe\/London\")).with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));\n\n\/\/ Start of this month\nZonedDateTime startOfMonth = LocalDate.now().atStartOfDay(ZoneOffset.UTC).with(TemporalAdjusters.firstDayOfMonth());\n\n\/\/ Days between dates\nLocalDate today = LocalDate.now();\nLocalDate threeDaysAgo = today.minusDays(3);\nlong days = ChronoUnit.DAYS.between(threeDaysAgo, today);\n\n\/\/ java.sql.date to java.time.Instant\njava.sql.Date sqlDate = new java.sql.Date(1446853831381L);\nInstant i = Instant.ofEpochMilli(sqlDate.getTime());\n\n\/\/Can also convert to LocalDate directly\nsqlDate.toLocalDate();<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/ Convert java.util.Date to java.time.ZonedDateTime<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">Date<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">now<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Date<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">ZonedDateTime<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">utc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ZonedDateTime<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ofInstant<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">now<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">toInstant<\/span><span style=\"color: #ECEFF4\">(),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ZoneOffset<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">UTC<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">ZonedDateTime<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">auckland<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ZonedDateTime<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ofInstant<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">now<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">toInstant<\/span><span style=\"color: #ECEFF4\">(),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ZoneId<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">of<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Pacific\/Auckland<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">))<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">ZonedDateTime<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">plusOne<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ZonedDateTime<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ofInstant<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">now<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">toInstant<\/span><span style=\"color: #ECEFF4\">(),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ZoneOffset<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">of<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">+1<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">))<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Convert java.time.ZonedDateTime to java.util.Date<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">ZonedDateTime<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">utc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ZonedDateTime<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">now<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ZoneOffset<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">UTC<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">Date<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">now<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Date<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">from<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">utc<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">toInstant<\/span><span style=\"color: #ECEFF4\">())<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Convert java.time.ZonedDateTime to milliseconds from Epoch (java.util.Date#getTime)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">ZonedDateTime<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">utc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ZonedDateTime<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">now<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ZoneOffset<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">UTC<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">utc<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">toInstant<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">toEpochMilli<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Start of today<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">ZonedDateTime<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">startOfToday<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">LocalDate<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">now<\/span><span style=\"color: #ECEFF4\">().<\/span><span style=\"color: #88C0D0\">atStartOfDay<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ZoneOffset<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">UTC<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Start of this week (Monday)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">ZonedDateTime<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">startOfWeek<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">LocalDate<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">now<\/span><span style=\"color: #ECEFF4\">().<\/span><span style=\"color: #88C0D0\">atStartOfDay<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ZoneId<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">of<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Europe\/London<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)).<\/span><span style=\"color: #88C0D0\">with<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">TemporalAdjusters<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">previousOrSame<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">DayOfWeek<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">MONDAY<\/span><span style=\"color: #ECEFF4\">))<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Start of this month<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">ZonedDateTime<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">startOfMonth<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">LocalDate<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">now<\/span><span style=\"color: #ECEFF4\">().<\/span><span style=\"color: #88C0D0\">atStartOfDay<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ZoneOffset<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">UTC<\/span><span style=\"color: #ECEFF4\">).<\/span><span style=\"color: #88C0D0\">with<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">TemporalAdjusters<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">firstDayOfMonth<\/span><span style=\"color: #ECEFF4\">())<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Days between dates<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">LocalDate<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">today<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">LocalDate<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">now<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">LocalDate<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">threeDaysAgo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">today<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">minusDays<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">days<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ChronoUnit<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">DAYS<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">between<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">threeDaysAgo<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> today<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ java.sql.date to java.time.Instant<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">java<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #8FBCBB\">sql<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #8FBCBB\">Date<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">sqlDate<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> java<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">sql<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Date<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">1446853831381L<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">Instant<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Instant<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ofEpochMilli<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">sqlDate<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getTime<\/span><span style=\"color: #ECEFF4\">())<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/Can also convert to LocalDate directly<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">sqlDate<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">toLocalDate<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>You can drop Joda-Time from your Scala apps running on Java 8, too although the conflict with Scala&#8217;s reserved word <span class=\"lang:default highlight:0 decode:true crayon-inline\">with<\/span> means backticks are sometimes required.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val friday = ZonedDateTime.now(ZoneId.of(\"Europe\/London\")).`with`(TemporalAdjusters.previousOrSame(DayOfWeek.FRIDAY)).truncatedTo(ChronoUnit.MINUTES)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">val<\/span><span style=\"color: #D8DEE9FF\"> friday <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">ZonedDateTime<\/span><span style=\"color: #D8DEE9FF\">.now(<\/span><span style=\"color: #8FBCBB\">ZoneId<\/span><span style=\"color: #D8DEE9FF\">.of(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Europe\/London<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">)).`with`(<\/span><span style=\"color: #8FBCBB\">TemporalAdjusters<\/span><span style=\"color: #D8DEE9FF\">.previousOrSame(<\/span><span style=\"color: #8FBCBB\">DayOfWeek<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #8FBCBB\">FRIDAY<\/span><span style=\"color: #D8DEE9FF\">)).truncatedTo(<\/span><span style=\"color: #8FBCBB\">ChronoUnit<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #8FBCBB\">MINUTES<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A short list of some common date\/time tasks using the new Java 8 Date &#038; Time API.<\/p>\n","protected":false},"author":1,"featured_media":2507,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[],"class_list":["post-2321","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/davidkeen.com\/blog\/wp-content\/uploads\/2015\/11\/numbers-time-watch-white.jpg?fit=1280%2C853&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/posts\/2321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/comments?post=2321"}],"version-history":[{"count":11,"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/posts\/2321\/revisions"}],"predecessor-version":[{"id":2848,"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/posts\/2321\/revisions\/2848"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/media\/2507"}],"wp:attachment":[{"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/media?parent=2321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/categories?post=2321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/davidkeen.com\/blog\/wp-json\/wp\/v2\/tags?post=2321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}