diff --git a/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java b/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java
index cdfdf3d..44dc194 100644
--- a/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java
+++ b/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java
@@ -18,27 +18,55 @@
 package org.onosproject.ui.table.cell;
 
 import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
-import org.onosproject.ui.table.CellFormatter;
+
+import java.util.Locale;
 
 /**
  * Formats time values using {@link DateTimeFormatter}.
  */
 public final class TimeFormatter extends AbstractCellFormatter {
 
-    private static final DateTimeFormatter DTF = DateTimeFormat.longTime();
+    private DateTimeFormatter dtf;
 
-    // non-instantiable
-    private TimeFormatter() { }
+    // NOTE: Unlike other formatters in this package, this one is not
+    //       implemented as a Singleton, because instances may be
+    //       decorated with alternate locale and/or timezone.
 
-    @Override
-    protected String nonNullFormat(Object value) {
-        return DTF.print((DateTime) value);
+    /**
+     * Constructs a time formatter that uses the default locale and timezone.
+     */
+    public TimeFormatter() {
+        dtf = DateTimeFormat.longTime();
     }
 
     /**
-     * An instance of this class.
+     * Sets the locale to use for formatting the time.
+     *
+     * @param locale locale to use for formatting
+     * @return self, for chaining
      */
-    public static final CellFormatter INSTANCE = new TimeFormatter();
+    public TimeFormatter withLocale(Locale locale) {
+        dtf = dtf.withLocale(locale);
+        return this;
+    }
+
+    /**
+     * Sets the time zone to use for formatting the time.
+     *
+     * @param zone time zone to use
+     * @return self, for chaining
+     */
+    public TimeFormatter withZone(DateTimeZone zone) {
+        dtf = dtf.withZone(zone);
+        return this;
+    }
+
+    @Override
+    protected String nonNullFormat(Object value) {
+        return dtf.print((DateTime) value);
+    }
+
 }
diff --git a/core/api/src/test/java/org/onosproject/ui/table/cell/TimeFormatterTest.java b/core/api/src/test/java/org/onosproject/ui/table/cell/TimeFormatterTest.java
index 924902a..4d0ca51 100644
--- a/core/api/src/test/java/org/onosproject/ui/table/cell/TimeFormatterTest.java
+++ b/core/api/src/test/java/org/onosproject/ui/table/cell/TimeFormatterTest.java
@@ -18,9 +18,12 @@
 package org.onosproject.ui.table.cell;
 
 import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
 import org.junit.Test;
 import org.onosproject.ui.table.CellFormatter;
 
+import java.util.Locale;
+
 import static org.junit.Assert.assertEquals;
 
 /**
@@ -28,10 +31,17 @@
  */
 public class TimeFormatterTest {
 
-    private static final DateTime TIME = DateTime.parse("2010-06-30T01:20");
-    private static final String EXP_OUTPUT = "1:20:00 AM PDT";
+    private static final Locale LOCALE = Locale.ENGLISH;
+    private static final DateTimeZone ZONE = DateTimeZone.UTC;
 
-    private CellFormatter fmt = TimeFormatter.INSTANCE;
+    private static final DateTime TIME = new DateTime(2015, 5, 4, 15, 30, ZONE);
+    private static final String EXP_OUTPUT = "3:30:00 PM UTC";
+
+    // Have to use explicit Locale and TimeZone for the unit test, so that
+    //  irrespective of which locale and time zone the test is run in, it
+    //  always produces the same result...
+    private CellFormatter fmt =
+            new TimeFormatter().withLocale(LOCALE).withZone(ZONE);
 
     @Test
     public void basic() {
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
index ab0da70..eeded83 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
@@ -74,7 +74,7 @@
         protected TableModel createTableModel() {
             TableModel tm = super.createTableModel();
             tm.setComparator(TCP_PORT, IntComparator.INSTANCE);
-            tm.setFormatter(UPDATED, TimeFormatter.INSTANCE);
+            tm.setFormatter(UPDATED, new TimeFormatter());
             return tm;
         }
 
