Replace joda-time with Java 8 time API

In the Gerrit project we have replaced joda-time with the Java 8
time API. Do the same in Gitiles.

Change-Id: If4cd80167526cbb412f97ef1fce34809941e1d6b
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",