diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 3dc6d9fa37..b40d9b71f3 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -65,6 +65,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 diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Times.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Times.java index 92cc72ae1d..8ae3842283 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Times.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Times.java @@ -29,10 +29,11 @@ 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 dateFormat = new ThreadLocal() { @Override protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("d-MMM-yyyy HH:mm:ss"); + return new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy"); } }; diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/webapps/static/yarn.dt.plugins.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/webapps/static/yarn.dt.plugins.js index 0c683e767d..7b069df483 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/webapps/static/yarn.dt.plugins.js +++ b/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);