瀏覽代碼

YARN-570. Time strings are formated in different timezone. (Akira Ajisaka and Peng Zhang via kasha)

(cherry picked from commit 840b13110d63d7e062cefd4b993cc7dea44aed8d)
Karthik Kambatla 10 年之前
父節點
當前提交
6cbd3aa2e8

+ 3 - 0
hadoop-yarn-project/CHANGES.txt

@@ -38,6 +38,9 @@ Release 2.7.0 - UNRELEASED
     YARN-2735. diskUtilizationPercentageCutoff and diskUtilizationSpaceCutoff 
     are initialized twice in DirectoryCollection. (Zhihai Xu via kasha)
 
+    YARN-570. Time strings are formated in different timezone. 
+    (Akira Ajisaka and Peng Zhang via kasha)
+
   OPTIMIZATIONS
 
   BUG FIXES

+ 2 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Times.java

@@ -29,10 +29,11 @@ import org.apache.hadoop.classification.InterfaceAudience.Private;
 public class Times {
   private static final Log LOG = LogFactory.getLog(Times.class);
 
+  // This format should match the one used in yarn.dt.plugins.js
   static final ThreadLocal<SimpleDateFormat> dateFormat =
       new ThreadLocal<SimpleDateFormat>() {
         @Override protected SimpleDateFormat initialValue() {
-          return new SimpleDateFormat("d-MMM-yyyy HH:mm:ss");
+          return new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
         }
       };
 

+ 26 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/webapps/static/yarn.dt.plugins.js

@@ -78,13 +78,38 @@ function renderHadoopDate(data, type, full) {
     if(data === '0'|| data === '-1') {
       return "N/A";
     }
-    return new Date(parseInt(data)).toUTCString();
+    var date = new Date(parseInt(data));
+    var monthList = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
+                     "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
+    var weekdayList = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
+    var offsetMinutes = date.getTimezoneOffset();
+    var offset
+    if (offsetMinutes <= 0) {
+      offset = "+" + zeroPad(-offsetMinutes / 60 * 100, 4);
+    } else {
+      offset = "-" + zeroPad(offsetMinutes / 60 * 100, 4);
+    }
+
+    // EEE MMM dd HH:mm:ss Z yyyy
+    return weekdayList[date.getDay()] + " " +
+        monthList[date.getMonth()] + " " +
+        date.getDate() + " " +
+        zeroPad(date.getHours(), 2) + ":" +
+        zeroPad(date.getMinutes(), 2) + ":" +
+        zeroPad(date.getSeconds(), 2) + " " +
+        offset + " " +
+        date.getFullYear();
   }
   // 'sort', 'type' and undefined all just use the number
   // If date is 0, then for purposes of sorting it should be consider max_int
   return data === '0' ? '9007199254740992' : data;  
 }
 
+function zeroPad(n, width) {
+  n = n + '';
+  return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
+}
+
 function renderHadoopElapsedTime(data, type, full) {
   if (type === 'display' || type === 'filter') {
     var timeDiff = parseInt(data);