diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
index 8f6224a..eebea25 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
@@ -19,6 +19,7 @@
 import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
 import static javax.servlet.http.HttpServletResponse.SC_OK;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Strings;
 import com.google.common.net.HttpHeaders;
 import com.google.gson.FieldNamingPolicy;
@@ -30,9 +31,11 @@
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
 import org.eclipse.jgit.junit.TestRepository;
+import org.eclipse.jgit.lib.PersonIdent;
 import org.junit.Before;
 
 import java.util.Map;
+import java.util.TimeZone;
 
 /** Base class for servlet tests. */
 public class ServletTest {
@@ -128,6 +131,11 @@
         .create();
   }
 
+  protected String currentTimeFormatted() {
+    PersonIdent p = new PersonIdent(repo.getRepository());
+    return new DateFormatter(Optional.<TimeZone>absent(), DateFormatter.Format.ISO).format(p);
+  }
+
   protected void assertNotFound(String path, String queryString) throws Exception {
     buildResponse(path, queryString, SC_NOT_FOUND);
   }
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
index 03a962f..e0f4360 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
@@ -21,6 +21,7 @@
 import com.google.gitiles.ServletTest;
 import com.google.gson.reflect.TypeToken;
 
+import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -31,6 +32,8 @@
 
 @RunWith(JUnit4.class)
 public class BlameServletTest extends ServletTest {
+  private static final String NAME = "Y. Author";
+  private static final String EMAIL = "yauthor@example.com";
   private static class RegionJsonData {
     int start;
     int count;
@@ -43,8 +46,12 @@
   public void blameJson() throws Exception {
     String contents1 = "foo\n";
     String contents2 = "foo\ncontents\n";
-    RevCommit c1 = repo.update("master", repo.commit().add("foo", contents1));
-    RevCommit c2 = repo.update("master", repo.commit().tick(10).parent(c1).add("foo", contents2));
+    PersonIdent author = new PersonIdent(NAME, EMAIL);
+    RevCommit c1 = repo.update("master", repo.commit().add("foo", contents1).author(author));
+    String c1Time = currentTimeFormatted();
+    RevCommit c2 = repo.update("master",
+        repo.commit().tick(10).parent(c1).add("foo", contents2).author(author));
+    String c2Time = currentTimeFormatted();
 
     Map<String, List<RegionJsonData>> result = getBlameJson("/repo/+blame/" + c2.name() + "/foo");
     assertThat(Iterables.getOnlyElement(result.keySet())).isEqualTo("regions");
@@ -56,18 +63,18 @@
     assertThat(r1.count).isEqualTo(1);
     assertThat(r1.path).isEqualTo("foo");
     assertThat(r1.commit).isEqualTo(c1.name());
-    assertThat(r1.author.name).isEqualTo("J. Author");
-    assertThat(r1.author.email).isEqualTo("jauthor@example.com");
-    assertThat(r1.author.time).isEqualTo("2009-03-13 17:29:48 -0330");
+    assertThat(r1.author.name).isEqualTo(NAME);
+    assertThat(r1.author.email).isEqualTo(EMAIL);
+    assertThat(r1.author.time).isEqualTo(c1Time);
 
     RegionJsonData r2 = regions.get(1);
     assertThat(r2.start).isEqualTo(2);
     assertThat(r2.count).isEqualTo(1);
     assertThat(r2.path).isEqualTo("foo");
     assertThat(r2.commit).isEqualTo(c2.name());
-    assertThat(r2.author.name).isEqualTo("J. Author");
-    assertThat(r2.author.email).isEqualTo("jauthor@example.com");
-    assertThat(r2.author.time).isEqualTo("2009-03-13 17:29:58 -0330");
+    assertThat(r2.author.name).isEqualTo(NAME);
+    assertThat(r2.author.email).isEqualTo(EMAIL);
+    assertThat(r2.author.time).isEqualTo(c2Time);
   }
 
   private Map<String, List<RegionJsonData>> getBlameJson(String path) throws Exception {
