diff --git a/WORKSPACE b/WORKSPACE
index c29dcac..e12f2ab 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -39,12 +39,6 @@
 )
 
 maven_jar(
-    name = "joda_time",
-    artifact = "joda-time:joda-time:2.9.9",
-    sha1 = "f7b520c458572890807d143670c9b24f4de90897",
-)
-
-maven_jar(
     name = "jsr305",
     artifact = "com.google.code.findbugs:jsr305:3.0.0",
     attach_source = False,
diff --git a/java/com/google/gitiles/BUILD b/java/com/google/gitiles/BUILD
index 6e2c554..8ec9118 100644
--- a/java/com/google/gitiles/BUILD
+++ b/java/com/google/gitiles/BUILD
@@ -5,7 +5,6 @@
     "//lib:gson",
     "//lib:guava",
     "//lib:html-types",
-    "//lib:joda-time",
     "//lib:jsr305",
     "//lib:commonmark",
     "//lib:cm-autolink",
diff --git a/java/com/google/gitiles/BaseServlet.java b/java/com/google/gitiles/BaseServlet.java
index 7fc2f9d..4b8a139 100644
--- a/java/com/google/gitiles/BaseServlet.java
+++ b/java/com/google/gitiles/BaseServlet.java
@@ -39,6 +39,7 @@
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.lang.reflect.Type;
+import java.time.Instant;
 import java.util.Map;
 import java.util.Optional;
 import java.util.regex.Pattern;
@@ -47,7 +48,6 @@
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import org.joda.time.Instant;
 
 /** Base servlet class for Gitiles servlets that serve Soy templates. */
 public abstract class BaseServlet extends HttpServlet {
@@ -59,7 +59,7 @@
     res.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0, must-revalidate");
     res.setHeader(HttpHeaders.PRAGMA, "no-cache");
     res.setHeader(HttpHeaders.EXPIRES, "Mon, 01 Jan 1990 00:00:00 GMT");
-    res.setDateHeader(HttpHeaders.DATE, new Instant().getMillis());
+    res.setDateHeader(HttpHeaders.DATE, Instant.now().toEpochMilli());
   }
 
   public static BaseServlet notFoundServlet() {
diff --git a/java/com/google/gitiles/ConfigUtil.java b/java/com/google/gitiles/ConfigUtil.java
index 593563d..131a62c 100644
--- a/java/com/google/gitiles/ConfigUtil.java
+++ b/java/com/google/gitiles/ConfigUtil.java
@@ -17,12 +17,12 @@
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 
 import com.google.common.cache.CacheBuilder;
+import java.time.Duration;
 import java.util.Optional;
 import java.util.TimeZone;
 import java.util.concurrent.TimeUnit;
 import javax.annotation.Nullable;
 import org.eclipse.jgit.lib.Config;
-import org.joda.time.Duration;
 
 /** Utilities for working with {@link Config} objects. */
 public class ConfigUtil {
@@ -47,7 +47,7 @@
       String name,
       @Nullable Duration defaultValue) {
     long m = config.getTimeUnit(section, subsection, name, -1, MILLISECONDS);
-    return m == -1 ? defaultValue : Duration.millis(m);
+    return m == -1 ? defaultValue : Duration.ofMillis(m);
   }
 
   /**
@@ -68,11 +68,11 @@
       }
       Duration expireAfterWrite = getDuration(config, "cache", name, "expireAfterWrite", null);
       if (expireAfterWrite != null) {
-        b.expireAfterWrite(expireAfterWrite.getMillis(), TimeUnit.MILLISECONDS);
+        b.expireAfterWrite(expireAfterWrite.toMillis(), TimeUnit.MILLISECONDS);
       }
       Duration expireAfterAccess = getDuration(config, "cache", name, "expireAfterAccess", null);
       if (expireAfterAccess != null) {
-        b.expireAfterAccess(expireAfterAccess.getMillis(), TimeUnit.MILLISECONDS);
+        b.expireAfterAccess(expireAfterAccess.toMillis(), TimeUnit.MILLISECONDS);
       }
       // Add other methods as needed.
     } catch (IllegalArgumentException e) {
diff --git a/javatests/com/google/gitiles/BUILD b/javatests/com/google/gitiles/BUILD
index ee28f2f..73b662c 100644
--- a/javatests/com/google/gitiles/BUILD
+++ b/javatests/com/google/gitiles/BUILD
@@ -3,7 +3,6 @@
     "//lib:guava",
     "//lib/jgit:jgit",
     "//lib/jgit:jgit-servlet",
-    "//lib:joda-time",
     "//lib/soy:soy",
 ]
 
diff --git a/javatests/com/google/gitiles/ConfigUtilTest.java b/javatests/com/google/gitiles/ConfigUtilTest.java
index a9d58bc..d2e3ac7 100644
--- a/javatests/com/google/gitiles/ConfigUtilTest.java
+++ b/javatests/com/google/gitiles/ConfigUtilTest.java
@@ -18,8 +18,8 @@
 import static com.google.gitiles.ConfigUtil.getDuration;
 import static org.junit.Assert.fail;
 
+import java.time.Duration;
 import org.eclipse.jgit.lib.Config;
-import org.joda.time.Duration;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -29,13 +29,13 @@
 public class ConfigUtilTest {
   @Test
   public void getDurationReturnsDuration() throws Exception {
-    Duration def = Duration.standardSeconds(2);
+    Duration def = Duration.ofSeconds(2);
     Config config = new Config();
     Duration t;
 
     config.setString("core", "dht", "timeout", "500 ms");
     t = getDuration(config, "core", "dht", "timeout", def);
-    assertThat(t.getMillis()).isEqualTo(500);
+    assertThat(t.toMillis()).isEqualTo(500);
 
     config.setString("core", "dht", "timeout", "5.2 sec");
     try {
@@ -47,25 +47,25 @@
 
     config.setString("core", "dht", "timeout", "1 min");
     t = getDuration(config, "core", "dht", "timeout", def);
-    assertThat(t.getMillis()).isEqualTo(60000);
+    assertThat(t.toMillis()).isEqualTo(60000);
   }
 
   @Test
   public void getDurationCanReturnDefault() throws Exception {
-    Duration def = Duration.standardSeconds(1);
+    Duration def = Duration.ofSeconds(1);
     Config config = new Config();
     Duration t;
 
     t = getDuration(config, "core", null, "blank", def);
-    assertThat(t.getMillis()).isEqualTo(1000);
+    assertThat(t.toMillis()).isEqualTo(1000);
 
     config.setString("core", null, "blank", "");
     t = getDuration(config, "core", null, "blank", def);
-    assertThat(t.getMillis()).isEqualTo(1000);
+    assertThat(t.toMillis()).isEqualTo(1000);
 
     config.setString("core", null, "blank", " ");
     t = getDuration(config, "core", null, "blank", def);
-    assertThat(t.getMillis()).isEqualTo(1000);
+    assertThat(t.toMillis()).isEqualTo(1000);
   }
 
   @Test
diff --git a/lib/BUILD b/lib/BUILD
index 9ee64d5..110865c 100644
--- a/lib/BUILD
+++ b/lib/BUILD
@@ -15,7 +15,6 @@
     "gfm-tables",
     "html-types",
     "jsr305",
-    "joda-time",
     "servlet-api_2_5",
     "servlet-api_3_0",
     "truth",
