diff --git a/core/api/src/main/java/org/onosproject/cluster/ClusterService.java b/core/api/src/main/java/org/onosproject/cluster/ClusterService.java
index e4cf7ec..1a75e5f 100644
--- a/core/api/src/main/java/org/onosproject/cluster/ClusterService.java
+++ b/core/api/src/main/java/org/onosproject/cluster/ClusterService.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.cluster;
 
+import java.time.Instant;
+import java.util.Optional;
 import java.util.Set;
 
 import org.joda.time.DateTime;
@@ -72,6 +74,27 @@
      * @param nodeId controller node identifier
      * @return system time when the availability state was last updated.
      */
-    DateTime getLastUpdated(NodeId nodeId);
+    default Instant getLastUpdatedInstant(NodeId nodeId) {
+        return Optional.ofNullable(getLastUpdated(nodeId))
+                    .map(DateTime::getMillis)
+                    .map(Instant::ofEpochMilli)
+                    .orElse(null);
+    }
+
+    /**
+     * Returns the system time when the availability state was last updated.
+     *
+     * @param nodeId controller node identifier
+     * @return system time when the availability state was last updated.
+     *
+     * @deprecated in 1.12.0
+     */
+    @Deprecated
+    default DateTime getLastUpdated(NodeId nodeId) {
+        return Optional.ofNullable(getLastUpdatedInstant(nodeId))
+                .map(Instant::toEpochMilli)
+                .map(DateTime::new)
+                .orElse(null);
+    }
 
 }
diff --git a/core/api/src/main/java/org/onosproject/cluster/ClusterStore.java b/core/api/src/main/java/org/onosproject/cluster/ClusterStore.java
index 7154c78..dfe0b23 100644
--- a/core/api/src/main/java/org/onosproject/cluster/ClusterStore.java
+++ b/core/api/src/main/java/org/onosproject/cluster/ClusterStore.java
@@ -20,6 +20,8 @@
 import org.onosproject.core.Version;
 import org.onosproject.store.Store;
 
+import java.time.Instant;
+import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -78,7 +80,28 @@
      * @param nodeId controller node identifier
      * @return system time when the availability state was last updated.
      */
-    DateTime getLastUpdated(NodeId nodeId);
+    default Instant getLastUpdatedInstant(NodeId nodeId) {
+        return Optional.ofNullable(getLastUpdated(nodeId))
+                    .map(DateTime::getMillis)
+                    .map(Instant::ofEpochMilli)
+                    .orElse(null);
+    }
+
+    /**
+     * Returns the system when the availability state was last updated.
+     *
+     * @param nodeId controller node identifier
+     * @return system time when the availability state was last updated.
+     *
+     * @deprecated in 1.12.0
+     */
+    @Deprecated
+    default DateTime getLastUpdated(NodeId nodeId) {
+        return Optional.ofNullable(getLastUpdatedInstant(nodeId))
+                .map(Instant::toEpochMilli)
+                .map(DateTime::new)
+                .orElse(null);
+    }
 
     /**
      * Adds a new controller node to the cluster.
diff --git a/core/api/src/main/java/org/onosproject/event/AbstractEvent.java b/core/api/src/main/java/org/onosproject/event/AbstractEvent.java
index 2d810a3..754ecbb 100644
--- a/core/api/src/main/java/org/onosproject/event/AbstractEvent.java
+++ b/core/api/src/main/java/org/onosproject/event/AbstractEvent.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.event;
 
-import org.joda.time.LocalDateTime;
+import org.onlab.util.Tools;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 
@@ -70,7 +70,7 @@
     @Override
     public String toString() {
         return toStringHelper(this)
-                .add("time", new LocalDateTime(time))
+                .add("time", Tools.defaultOffsetDataTime(time))
                 .add("type", type())
                 .add("subject", subject())
                 .toString();
diff --git a/core/api/src/main/java/org/onosproject/mastership/MastershipEvent.java b/core/api/src/main/java/org/onosproject/mastership/MastershipEvent.java
index 4242e61..db5ba74 100644
--- a/core/api/src/main/java/org/onosproject/mastership/MastershipEvent.java
+++ b/core/api/src/main/java/org/onosproject/mastership/MastershipEvent.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.mastership;
 
-import org.joda.time.LocalDateTime;
+import org.onlab.util.Tools;
 import org.onosproject.cluster.RoleInfo;
 import org.onosproject.event.AbstractEvent;
 import org.onosproject.net.DeviceId;
@@ -114,7 +114,7 @@
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("time", new LocalDateTime(time()))
+                .add("time", Tools.defaultOffsetDataTime(time()))
                 .add("type", type())
                 .add("subject", subject())
                 .add("roleInfo", roleInfo)
diff --git a/core/api/src/main/java/org/onosproject/net/config/NetworkConfigEvent.java b/core/api/src/main/java/org/onosproject/net/config/NetworkConfigEvent.java
index e94e0d9..ee1f03c 100644
--- a/core/api/src/main/java/org/onosproject/net/config/NetworkConfigEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/config/NetworkConfigEvent.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.net.config;
 
-import org.joda.time.LocalDateTime;
+import org.onlab.util.Tools;
 import org.onosproject.event.AbstractEvent;
 
 import java.util.Optional;
@@ -141,7 +141,7 @@
     @Override
     public String toString() {
         return toStringHelper(this)
-                .add("time", new LocalDateTime(time()))
+                .add("time", Tools.defaultOffsetDataTime(time()))
                 .add("type", type())
                 .add("config", config())
                 .add("prevConfig", prevConfig())
diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceEvent.java b/core/api/src/main/java/org/onosproject/net/device/DeviceEvent.java
index 7ebb041..16e9d25 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DeviceEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DeviceEvent.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.net.device;
 
-import org.joda.time.LocalDateTime;
+import org.onlab.util.Tools;
 import org.onosproject.event.AbstractEvent;
 import org.onosproject.net.Device;
 import org.onosproject.net.Port;
@@ -132,7 +132,7 @@
             return super.toString();
         }
         return toStringHelper(this)
-                .add("time", new LocalDateTime(time()))
+                .add("time", Tools.defaultOffsetDataTime(time()))
                 .add("type", type())
                 .add("subject", subject())
                 .add("port", port)
diff --git a/core/api/src/main/java/org/onosproject/net/host/HostEvent.java b/core/api/src/main/java/org/onosproject/net/host/HostEvent.java
index 318c3ff..0ed491f 100644
--- a/core/api/src/main/java/org/onosproject/net/host/HostEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/host/HostEvent.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.net.host;
 
-import org.joda.time.LocalDateTime;
+import org.onlab.util.Tools;
 import org.onosproject.event.AbstractEvent;
 import org.onosproject.net.Host;
 
@@ -104,7 +104,7 @@
     @Override
     public String toString() {
         return toStringHelper(this)
-                .add("time", new LocalDateTime(time()))
+                .add("time", Tools.defaultOffsetDataTime(time()))
                 .add("type", type())
                 .add("subject", subject())
                 .add("prevSubject", prevSubject())
diff --git a/core/api/src/main/java/org/onosproject/net/intf/InterfaceEvent.java b/core/api/src/main/java/org/onosproject/net/intf/InterfaceEvent.java
index 1e7d9ba..9d26208 100644
--- a/core/api/src/main/java/org/onosproject/net/intf/InterfaceEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/intf/InterfaceEvent.java
@@ -16,7 +16,7 @@
 
 package org.onosproject.net.intf;
 
-import org.joda.time.LocalDateTime;
+import org.onlab.util.Tools;
 import org.onosproject.event.AbstractEvent;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
@@ -106,7 +106,7 @@
             return super.toString();
         }
         return toStringHelper(this)
-                .add("time", new LocalDateTime(time()))
+                .add("time", Tools.defaultOffsetDataTime(time()))
                 .add("type", type())
                 .add("subject", subject())
                 .add("prevSubject", prevSubject)
diff --git a/core/api/src/main/java/org/onosproject/store/service/Versioned.java b/core/api/src/main/java/org/onosproject/store/service/Versioned.java
index a3f555e..5033240 100644
--- a/core/api/src/main/java/org/onosproject/store/service/Versioned.java
+++ b/core/api/src/main/java/org/onosproject/store/service/Versioned.java
@@ -18,8 +18,8 @@
 
 import java.util.function.Function;
 
-import org.joda.time.DateTime;
 import org.onlab.util.ByteArraySizeHashPrinter;
+import org.onlab.util.Tools;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
@@ -143,7 +143,7 @@
         return MoreObjects.toStringHelper(this)
             .add("value", value instanceof byte[] ? new ByteArraySizeHashPrinter((byte[]) value) : value)
             .add("version", version)
-            .add("creationTime", new DateTime(creationTime))
+            .add("creationTime", Tools.defaultOffsetDataTime(creationTime))
             .toString();
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/store/service/WallClockTimestamp.java b/core/api/src/main/java/org/onosproject/store/service/WallClockTimestamp.java
index 307de2e..78f6b19 100644
--- a/core/api/src/main/java/org/onosproject/store/service/WallClockTimestamp.java
+++ b/core/api/src/main/java/org/onosproject/store/service/WallClockTimestamp.java
@@ -19,7 +19,7 @@
 
 import java.util.Objects;
 
-import org.joda.time.DateTime;
+import org.onlab.util.Tools;
 import org.onosproject.store.Timestamp;
 
 import com.google.common.collect.ComparisonChain;
@@ -69,7 +69,7 @@
 
     @Override
     public String toString() {
-        return new DateTime(unixTimestamp).toString();
+        return Tools.defaultOffsetDataTime(unixTimestamp).toString();
     }
 
     /**
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 f2dba03..adf8ead 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
@@ -16,13 +16,21 @@
 
 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 static java.time.temporal.ChronoField.CLOCK_HOUR_OF_AMPM;
+import static java.time.temporal.ChronoField.MINUTE_OF_HOUR;
+import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
+
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.ChronoField;
+import java.time.temporal.TemporalAccessor;
 import java.util.Locale;
 
+import org.joda.time.DateTimeZone;
+
 /**
  * Formats time values using {@link DateTimeFormatter}.
  */
@@ -38,7 +46,19 @@
      * Constructs a time formatter that uses the default locale and timezone.
      */
     public TimeFormatter() {
-        dtf = DateTimeFormat.longTime();
+        dtf = new DateTimeFormatterBuilder()
+                .appendValue(CLOCK_HOUR_OF_AMPM)
+                .appendLiteral(':')
+                .appendValue(MINUTE_OF_HOUR, 2)
+                .optionalStart()
+                .appendLiteral(':')
+                .appendValue(SECOND_OF_MINUTE, 2)
+                .appendLiteral(' ')
+                .appendText(ChronoField.AMPM_OF_DAY)
+                .optionalStart()
+                .appendLiteral(' ')
+                .appendOffset("+HH:MM", "+00:00")
+                .toFormatter();
     }
 
     /**
@@ -58,14 +78,33 @@
      * @param zone time zone to use
      * @return self, for chaining
      */
-    public TimeFormatter withZone(DateTimeZone zone) {
+    public TimeFormatter withZone(ZoneId zone) {
         dtf = dtf.withZone(zone);
         return this;
     }
 
+    /**
+     * Sets the time zone to use for formatting the time.
+     *
+     * @param zone time zone to use
+     * @return self, for chaining
+     *
+     * @deprecated in 1.12.0
+     */
+    @Deprecated
+    public TimeFormatter withZone(DateTimeZone zone) {
+        return withZone(zone.toTimeZone().toZoneId());
+    }
+
     @Override
     protected String nonNullFormat(Object value) {
-        return dtf.print((DateTime) value);
+        if (value instanceof TemporalAccessor) {
+            return dtf.format((TemporalAccessor) value);
+        } else if (value instanceof org.joda.time.DateTime) {
+            return dtf.format(Instant.ofEpochMilli(((org.joda.time.DateTime) value).getMillis()));
+        }
+        // should never reach here
+        return String.valueOf(value);
     }
 
 }
