This is an automated email from the ASF dual-hosted git repository.

caishunfeng pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 84f2cfe  [Feature][Server] Custom timezone - Add timezone handler 
unified (#8477)
84f2cfe is described below

commit 84f2cfec3989a2b41085d0b1f67a6d16d9a15e6e
Author: caishunfeng <[email protected]>
AuthorDate: Thu Feb 24 18:20:34 2022 +0800

    [Feature][Server] Custom timezone - Add timezone handler unified (#8477)
    
    * date convert of timezone
    
    * remove @JsonFormat
    
    * add unit test
    
    * fix time preview in scheduler
    
    * optimization & add env config
    
    Co-authored-by: caishunfeng <[email protected]>
---
 .../apache/dolphinscheduler/alert/AlertServer.java | 10 +++
 .../src/main/resources/application.yaml            |  3 +
 .../dolphinscheduler/api/ApiApplicationServer.java | 13 ++++
 .../apache/dolphinscheduler/api/dto/AuditDto.java  |  3 -
 .../dolphinscheduler/api/dto/ScheduleParam.java    |  2 -
 .../dolphinscheduler/api/dto/gantt/Task.java       |  3 -
 .../api/dto/treeview/Instance.java                 |  2 -
 .../api/interceptor/LoginHandlerInterceptor.java   |  8 ++-
 .../api/service/impl/SchedulerServiceImpl.java     |  4 +-
 .../common/model/DateInterval.java                 |  2 -
 .../dolphinscheduler/common/model/Server.java      |  2 -
 .../common/model/WorkerServerModel.java            |  2 -
 .../common/thread/ThreadLocalContext.java          | 20 +++---
 .../dolphinscheduler/common/utils/DateUtils.java   | 84 ++++++++++++++++++----
 .../dolphinscheduler/common/utils/JSONUtils.java   |  6 +-
 .../dolphinscheduler/common/utils/LoggerUtils.java |  6 +-
 .../common/utils/ParameterUtils.java               |  2 +-
 .../utils/placeholder/BusinessTimeUtils.java       |  6 +-
 .../utils/placeholder/TimePlaceholderUtils.java    |  6 +-
 .../common/utils/DateUtilsTest.java                | 21 +++++-
 .../common/utils/JSONUtilsTest.java                | 25 ++++++-
 .../placeholder/TimePlaceholderUtilsTest.java      |  2 +-
 .../dolphinscheduler/dao/entity/AuditLog.java      |  2 -
 .../dao/entity/CycleDependency.java                |  2 -
 .../dolphinscheduler/dao/entity/DataSource.java    |  2 -
 .../dao/entity/DqComparisonType.java               |  3 -
 .../dao/entity/DqExecuteResult.java                |  2 -
 .../dao/entity/DqRuleExecuteSql.java               |  3 -
 .../dao/entity/DqRuleInputEntry.java               |  3 -
 .../dao/entity/DqTaskStatisticsValue.java          |  4 --
 .../dolphinscheduler/dao/entity/Environment.java   |  2 -
 .../dao/entity/EnvironmentWorkerGroupRelation.java |  2 -
 .../dolphinscheduler/dao/entity/ErrorCommand.java  |  3 -
 .../dolphinscheduler/dao/entity/MonitorRecord.java |  1 -
 .../dao/entity/ProcessAlertContent.java            |  4 --
 .../dao/entity/ProcessDefinition.java              |  2 -
 .../dao/entity/ProcessDefinitionLog.java           |  1 -
 .../dao/entity/ProcessInstance.java                |  5 --
 .../dao/entity/ProcessTaskRelation.java            |  3 -
 .../dao/entity/ProcessTaskRelationLog.java         |  1 -
 .../apache/dolphinscheduler/dao/entity/Queue.java  |  2 -
 .../dolphinscheduler/dao/entity/Resource.java      |  2 -
 .../dolphinscheduler/dao/entity/ResourcesUser.java |  2 -
 .../dolphinscheduler/dao/entity/Schedule.java      |  4 --
 .../dolphinscheduler/dao/entity/Session.java       |  1 -
 .../dao/entity/TaskAlertContent.java               |  2 -
 .../dao/entity/TaskDefinition.java                 |  3 -
 .../dao/entity/TaskDefinitionLog.java              |  1 -
 .../dolphinscheduler/dao/entity/TaskGroup.java     |  3 -
 .../dao/entity/TaskGroupQueue.java                 |  2 -
 .../dolphinscheduler/dao/entity/TaskInstance.java  |  7 --
 .../dolphinscheduler/dao/entity/TaskMainInfo.java  |  2 -
 .../dolphinscheduler/dao/entity/TaskRecord.java    |  2 -
 .../apache/dolphinscheduler/dao/entity/Tenant.java |  2 -
 .../dolphinscheduler/dao/entity/UDFUser.java       |  2 -
 .../dolphinscheduler/dao/entity/UdfFunc.java       |  2 -
 .../apache/dolphinscheduler/dao/entity/User.java   |  2 -
 .../dolphinscheduler/dao/entity/WorkerGroup.java   |  2 -
 .../dolphinscheduler/dao/entity/WorkerServer.java  |  2 -
 .../dolphinscheduler/data/quality/Constants.java   |  5 ++
 .../data/quality/utils/JsonUtils.java              |  6 +-
 .../server/master/MasterServer.java                |  8 +++
 .../master/processor/queue/TaskResponseEvent.java  |  2 -
 .../master/runner/WorkflowExecuteThread.java       |  2 +-
 .../master/runner/task/DependentTaskProcessor.java |  2 -
 .../src/main/resources/application.yaml            |  3 +
 .../server/PythonGatewayServer.java                | 10 +++
 .../remote/command/TaskExecuteAckCommand.java      |  1 -
 .../remote/command/TaskExecuteResponseCommand.java |  3 -
 .../dolphinscheduler/server/utils/LogUtils.java    |  2 +-
 .../server/utils/LogUtilsTest.java                 |  2 +-
 .../service/json/DateJsonSerializer.java           | 27 +++----
 .../service/queue/entity/TaskExecutionContext.java |  3 -
 .../spi/task/request/TaskRequest.java              |  5 --
 .../spi/task/request/UdfFuncRequest.java           |  2 -
 .../dolphinscheduler/spi/utils/JSONUtils.java      |  4 +-
 .../apache/dolphinscheduler/StandaloneServer.java  | 15 ++++
 .../src/main/resources/application.yaml            |  5 +-
 .../task/dq/rule/entity/DqRuleExecuteSql.java      |  2 -
 .../task/dq/rule/entity/DqRuleInputEntry.java      |  4 --
 .../pages/definition/pages/list/_source/timing.vue |  3 +-
 .../server/worker/WorkerServer.java                |  7 ++
 .../server/worker/runner/TaskExecuteThread.java    |  2 +-
 .../src/main/resources/application.yaml            |  3 +
 script/env/dolphinscheduler_env.sh                 |  1 +
 85 files changed, 259 insertions(+), 192 deletions(-)

diff --git 
a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
 
b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
index f8324ac..f776be5 100644
--- 
a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
+++ 
b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
@@ -27,6 +27,7 @@ import 
org.apache.dolphinscheduler.remote.config.NettyServerConfig;
 
 import java.io.Closeable;
 import java.util.List;
+import java.util.TimeZone;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
@@ -36,6 +37,7 @@ import javax.annotation.PreDestroy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
@@ -58,6 +60,9 @@ public class AlertServer implements Closeable {
     @Autowired
     private AlertConfig config;
 
+    @Value("${spring.jackson.time-zone:UTC}")
+    private String timezone;
+
     public AlertServer(PluginDao pluginDao, AlertDao alertDao, 
AlertPluginManager alertPluginManager, AlertSender alertSender, 
AlertRequestProcessor alertRequestProcessor) {
         this.pluginDao = pluginDao;
         this.alertDao = alertDao;
@@ -70,6 +75,11 @@ public class AlertServer implements Closeable {
         SpringApplication.run(AlertServer.class, args);
     }
 
+    @PostConstruct
+    public void init() {
+        TimeZone.setDefault(TimeZone.getTimeZone(timezone));
+    }
+
     @EventListener
     public void start(ApplicationReadyEvent readyEvent) {
         logger.info("Starting Alert server");
diff --git 
a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml
 
b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml
index f68d1b8..1de6b9f 100644
--- 
a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml
+++ 
b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml
@@ -18,6 +18,9 @@
 spring:
   application:
     name: alert-server
+  jackson:
+    time-zone: UTC
+    date-format: "yyyy-MM-dd HH:mm:ss"
   main:
     banner-mode: off
   datasource:
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
index 7981f8a..020ee02 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
@@ -17,6 +17,12 @@
 
 package org.apache.dolphinscheduler.api;
 
+import java.util.TimeZone;
+
+import javax.annotation.PostConstruct;
+
+import org.quartz.SchedulerException;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.ServletComponentScan;
@@ -27,8 +33,15 @@ import org.springframework.context.annotation.ComponentScan;
 @ComponentScan("org.apache.dolphinscheduler")
 public class ApiApplicationServer {
 
+    @Value("${spring.jackson.time-zone:UTC}")
+    private String timezone;
+
     public static void main(String[] args) {
         SpringApplication.run(ApiApplicationServer.class);
     }
 
+    @PostConstruct
+    public void run() {
+        TimeZone.setDefault(TimeZone.getTimeZone(timezone));
+    }
 }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/AuditDto.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/AuditDto.java
index c89079b..437a2f8 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/AuditDto.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/AuditDto.java
@@ -19,8 +19,6 @@ package org.apache.dolphinscheduler.api.dto;
 
 import java.util.Date;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-
 public class AuditDto {
 
     private String userName;
@@ -29,7 +27,6 @@ public class AuditDto {
 
     private String operation;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date time;
 
     private String resourceName;
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ScheduleParam.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ScheduleParam.java
index 6d957bf..7e71a77 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ScheduleParam.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ScheduleParam.java
@@ -26,9 +26,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
  */
 public class ScheduleParam {
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date startTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
     private String crontab;
     private String timezoneId;
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/gantt/Task.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/gantt/Task.java
index ec3a436..ece9ad2 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/gantt/Task.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/gantt/Task.java
@@ -43,19 +43,16 @@ public class Task {
     /**
      * task execution date
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date executionDate;
 
     /**
      * task iso start
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date isoStart;
 
     /**
      * task iso end
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date isoEnd;
 
     /**
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/treeview/Instance.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/treeview/Instance.java
index c39ece8..52b0c95 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/treeview/Instance.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/treeview/Instance.java
@@ -51,13 +51,11 @@ public class Instance {
     /**
      * node start time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date startTime;
 
     /**
      * node end time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
 
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LoginHandlerInterceptor.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LoginHandlerInterceptor.java
index ec56db3..efa658f 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LoginHandlerInterceptor.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LoginHandlerInterceptor.java
@@ -21,6 +21,7 @@ import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.security.Authenticator;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.Flag;
+import org.apache.dolphinscheduler.common.thread.ThreadLocalContext;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.mapper.UserMapper;
 
@@ -34,6 +35,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
 
 /**
  * login interceptor, must log in first
@@ -84,9 +86,13 @@ public class LoginHandlerInterceptor implements 
HandlerInterceptor {
             logger.info(Status.USER_DISABLED.getMsg());
             return false;
         }
-
         request.setAttribute(Constants.SESSION_USER, user);
+        ThreadLocalContext.getTimezoneThreadLocal().set(user.getTimeZone());
         return true;
     }
 
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse 
response, Object handler, ModelAndView modelAndView) throws Exception {
+        ThreadLocalContext.getTimezoneThreadLocal().remove();
+    }
 }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java
index 1a0bef0..268d89e 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java
@@ -562,7 +562,9 @@ public class SchedulerServiceImpl extends BaseServiceImpl 
implements SchedulerSe
             return result;
         }
         List<Date> selfFireDateList = CronUtils.getSelfFireDateList(startTime, 
endTime, cronExpression, Constants.PREVIEW_SCHEDULE_EXECUTE_COUNT);
-        result.put(Constants.DATA_LIST, 
selfFireDateList.stream().map(DateUtils::dateToString));
+        List<String> previewDateList = new ArrayList<>();
+        selfFireDateList.forEach(date -> 
previewDateList.add(DateUtils.dateToString(date, 
scheduleParam.getTimezoneId())));
+        result.put(Constants.DATA_LIST, previewDateList);
         putMsg(result, Status.SUCCESS);
         return result;
     }
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
index 81adcd7..98b4ccd 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
@@ -26,9 +26,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
  * date interval class
  */
 public class DateInterval {
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date startTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date endTime;
 
     public DateInterval(Date beginTime, Date endTime) {
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/Server.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/Server.java
index d0d1394..83dc64b 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/Server.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/Server.java
@@ -54,13 +54,11 @@ public class Server {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date createTime;
 
     /**
      * laster heart beat time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date lastHeartbeatTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/WorkerServerModel.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/WorkerServerModel.java
index 0c2ab2f..869c05a 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/WorkerServerModel.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/WorkerServerModel.java
@@ -55,13 +55,11 @@ public class WorkerServerModel {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**
      * last heart beat time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date lastHeartbeatTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/thread/ThreadLocalContext.java
similarity index 61%
copy from 
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
copy to 
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/thread/ThreadLocalContext.java
index 7981f8a..9d523d8 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/thread/ThreadLocalContext.java
@@ -15,20 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.api;
+package org.apache.dolphinscheduler.common.thread;
 
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.web.servlet.ServletComponentScan;
-import org.springframework.context.annotation.ComponentScan;
+/**
+ * thread local context
+ */
+public class ThreadLocalContext {
 
-@ServletComponentScan
-@SpringBootApplication
-@ComponentScan("org.apache.dolphinscheduler")
-public class ApiApplicationServer {
+    public static final ThreadLocal<String> timezoneThreadLocal = new 
ThreadLocal<>();
 
-    public static void main(String[] args) {
-        SpringApplication.run(ApiApplicationServer.class);
+    public static ThreadLocal<String> getTimezoneThreadLocal() {
+        return timezoneThreadLocal;
     }
-
 }
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
index 6ed252f..83f50d4 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
@@ -18,6 +18,7 @@
 package org.apache.dolphinscheduler.common.utils;
 
 import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.thread.ThreadLocalContext;
 
 import org.apache.commons.lang.StringUtils;
 
@@ -56,7 +57,23 @@ public final class DateUtils {
      * @return local datetime
      */
     private static LocalDateTime date2LocalDateTime(Date date) {
-        return LocalDateTime.ofInstant(date.toInstant(), 
ZoneId.systemDefault());
+        String timezone = ThreadLocalContext.getTimezoneThreadLocal().get();
+        ZoneId zoneId = ZoneId.systemDefault();
+        if (StringUtils.isNotEmpty(timezone)) {
+            zoneId = ZoneId.of(timezone);
+        }
+        return date2LocalDateTime(date, zoneId);
+    }
+
+    /**
+     * date to local datetime
+     *
+     * @param date date
+     * @param zoneId zoneId
+     * @return local datetime
+     */
+    private static LocalDateTime date2LocalDateTime(Date date, ZoneId zoneId) {
+        return LocalDateTime.ofInstant(date.toInstant(), zoneId);
     }
 
     /**
@@ -66,7 +83,22 @@ public final class DateUtils {
      * @return date
      */
     private static Date localDateTime2Date(LocalDateTime localDateTime) {
-        Instant instant = 
localDateTime.atZone(ZoneId.systemDefault()).toInstant();
+        String timezone = ThreadLocalContext.getTimezoneThreadLocal().get();
+        ZoneId zoneId = ZoneId.systemDefault();
+        if (StringUtils.isNotEmpty(timezone)) {
+            zoneId = ZoneId.of(timezone);
+        }
+        return localDateTime2Date(localDateTime, zoneId);
+    }
+
+    /**
+     * local datetime to date
+     *
+     * @param localDateTime local datetime
+     * @return date
+     */
+    private static Date localDateTime2Date(LocalDateTime localDateTime, ZoneId 
zoneId) {
+        Instant instant = localDateTime.atZone(zoneId).toInstant();
         return Date.from(instant);
     }
 
@@ -96,8 +128,11 @@ public final class DateUtils {
      * @param format e.g. yyyy-MM-dd HH:mm:ss
      * @return date string
      */
-    public static String format(Date date, String format) {
-        return format(date2LocalDateTime(date), format);
+    public static String format(Date date, String format, String timezone) {
+        if (StringUtils.isEmpty(timezone)) {
+            return format(date2LocalDateTime(date), format);
+        }
+        return format(date2LocalDateTime(date, ZoneId.of(timezone)), format);
     }
 
     /**
@@ -118,7 +153,18 @@ public final class DateUtils {
      * @return date string
      */
     public static String dateToString(Date date) {
-        return format(date, Constants.YYYY_MM_DD_HH_MM_SS);
+        return format(date, Constants.YYYY_MM_DD_HH_MM_SS, null);
+    }
+
+    /**
+     * convert time to yyyy-MM-dd HH:mm:ss format
+     *
+     * @param date date
+     * @param timezone timezone
+     * @return date string
+     */
+    public static String dateToString(Date date, String timezone) {
+        return format(date, Constants.YYYY_MM_DD_HH_MM_SS, timezone);
     }
 
     /**
@@ -126,12 +172,16 @@ public final class DateUtils {
      *
      * @param date   date
      * @param format format
+     * @param timezone timezone, if null, use system default timezone
      * @return date
      */
-    public static Date parse(String date, String format) {
+    public static Date parse(String date, String format, String timezone) {
         try {
             LocalDateTime ldt = LocalDateTime.parse(date, 
DateTimeFormatter.ofPattern(format));
-            return localDateTime2Date(ldt);
+            if (StringUtils.isEmpty(timezone)) {
+                return localDateTime2Date(ldt);
+            }
+            return localDateTime2Date(ldt, ZoneId.of(timezone));
         } catch (Exception e) {
             logger.error("error while parse date:" + date, e);
         }
@@ -141,11 +191,22 @@ public final class DateUtils {
     /**
      * convert date str to yyyy-MM-dd HH:mm:ss format
      *
-     * @param str date string
+     * @param date date string
+     * @return yyyy-MM-dd HH:mm:ss format
+     */
+    public static Date stringToDate(String date) {
+        return parse(date, Constants.YYYY_MM_DD_HH_MM_SS, null);
+    }
+
+    /**
+     * convert date str to yyyy-MM-dd HH:mm:ss format
+     *
+     * @param date date string
+     * @param timezone
      * @return yyyy-MM-dd HH:mm:ss format
      */
-    public static Date stringToDate(String str) {
-        return parse(str, Constants.YYYY_MM_DD_HH_MM_SS);
+    public static Date stringToDate(String date, String timezone) {
+        return parse(date, Constants.YYYY_MM_DD_HH_MM_SS, timezone);
     }
 
     /**
@@ -431,8 +492,7 @@ public final class DateUtils {
      * @return current date
      */
     public static Date getCurrentDate() {
-        return DateUtils.parse(DateUtils.getCurrentTime(),
-            Constants.YYYY_MM_DD_HH_MM_SS);
+        return new Date();
     }
 
     /**
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java
index d2a3e30..23d0f44 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java
@@ -24,9 +24,12 @@ import static 
com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKN
 import static 
com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL;
 import static 
com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS;
 
+import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.spi.utils.StringUtils;
 
 import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -69,7 +72,8 @@ public class JSONUtils {
             .configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true)
             .configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
             .configure(REQUIRE_SETTERS_FOR_GETTERS, true)
-            .setTimeZone(TimeZone.getDefault());
+            .setTimeZone(TimeZone.getDefault())
+            .setDateFormat(new 
SimpleDateFormat(Constants.YYYY_MM_DD_HH_MM_SS));
 
     private JSONUtils() {
         throw new UnsupportedOperationException("Construct JSONUtils");
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/LoggerUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/LoggerUtils.java
index add5767..0d7055e 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/LoggerUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/LoggerUtils.java
@@ -51,6 +51,7 @@ public class LoggerUtils {
 
     /**
      * build job id
+     *
      * @return task id format
      */
     public static String buildTaskId(Date firstSubmitTime,
@@ -59,8 +60,9 @@ public class LoggerUtils {
                                      int processInstId,
                                      int taskId) {
         // like TaskAppId=TASK-20211107-798_1-4084-15210
-        String firstSubmitTimeStr = DateUtils.format(firstSubmitTime, 
Constants.YYYYMMDD);
-        return String.format("%s=%s-%s-%s_%s-%s-%s", 
TaskConstants.TASK_APPID_LOG_FORMAT, TaskConstants.TASK_LOGGER_INFO_PREFIX, 
firstSubmitTimeStr, processDefineCode, processDefineVersion, processInstId, 
taskId);
+        String firstSubmitTimeStr = DateUtils.format(firstSubmitTime, 
Constants.YYYYMMDD, null);
+        return String.format("%s=%s-%s-%s_%s-%s-%s",
+                TaskConstants.TASK_APPID_LOG_FORMAT, 
TaskConstants.TASK_LOGGER_INFO_PREFIX, firstSubmitTimeStr, processDefineCode, 
processDefineVersion, processInstId, taskId);
     }
 
     /**
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
index f247aa0..ed109f7 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
@@ -66,7 +66,7 @@ public class ParameterUtils {
         if (parameterMap != null && null != 
parameterMap.get(Constants.PARAMETER_DATETIME)) {
             //Get current time, schedule execute time
             String cronTimeStr = 
parameterMap.get(Constants.PARAMETER_DATETIME);
-            cronTime = DateUtils.parse(cronTimeStr, 
Constants.PARAMETER_FORMAT_TIME);
+            cronTime = DateUtils.parse(cronTimeStr, 
Constants.PARAMETER_FORMAT_TIME, null);
         } else {
             cronTime = new Date();
         }
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/BusinessTimeUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/BusinessTimeUtils.java
index 7c2d231..dc2c8cf 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/BusinessTimeUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/BusinessTimeUtils.java
@@ -71,9 +71,9 @@ public class BusinessTimeUtils {
                 break;
         }
         Date businessCurrentDate = addDays(businessDate, 1);
-        result.put(Constants.PARAMETER_CURRENT_DATE, 
format(businessCurrentDate, PARAMETER_FORMAT_DATE));
-        result.put(Constants.PARAMETER_BUSINESS_DATE, format(businessDate, 
PARAMETER_FORMAT_DATE));
-        result.put(Constants.PARAMETER_DATETIME, format(businessCurrentDate, 
PARAMETER_FORMAT_TIME));
+        result.put(Constants.PARAMETER_CURRENT_DATE, 
format(businessCurrentDate, PARAMETER_FORMAT_DATE, null));
+        result.put(Constants.PARAMETER_BUSINESS_DATE, format(businessDate, 
PARAMETER_FORMAT_DATE, null));
+        result.put(Constants.PARAMETER_DATETIME, format(businessCurrentDate, 
PARAMETER_FORMAT_TIME, null));
         return result;
     }
 }
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtils.java
index 1974460..fcadbe9 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtils.java
@@ -337,14 +337,14 @@ public class TimePlaceholderUtils {
 
                 Map.Entry<Date, String> entry = 
calcTimeExpression(timeExpression, date);
 
-                String dateStr = DateUtils.format(entry.getKey(), 
entry.getValue());
+                String dateStr = DateUtils.format(entry.getKey(), 
entry.getValue(), null);
 
-                Date timestamp = DateUtils.parse(dateStr, 
Constants.PARAMETER_FORMAT_TIME);
+                Date timestamp = DateUtils.parse(dateStr, 
Constants.PARAMETER_FORMAT_TIME, null);
 
                 value = String.valueOf(timestamp.getTime() / 1000);
             } else {
                 Map.Entry<Date, String> entry = calcTimeExpression(expression, 
date);
-                value = DateUtils.format(entry.getKey(), entry.getValue());
+                value = DateUtils.format(entry.getKey(), entry.getValue(), 
null);
             }
         } catch (Exception e) {
             logger.error(e.getMessage(), e);
diff --git 
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DateUtilsTest.java
 
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DateUtilsTest.java
index 2cddfbb..3fb1065 100644
--- 
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DateUtilsTest.java
+++ 
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DateUtilsTest.java
@@ -17,12 +17,15 @@
 
 package org.apache.dolphinscheduler.common.utils;
 
+import org.apache.dolphinscheduler.common.thread.ThreadLocalContext;
+
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.TimeZone;
 
+import javax.management.timer.Timer;
+
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -206,4 +209,20 @@ public class DateUtilsTest {
         Assert.assertNull(DateUtils.getTimezone(null));
         Assert.assertEquals(TimeZone.getTimeZone("MST"), 
DateUtils.getTimezone("MST"));
     }
+
+    @Test
+    public void testTimezone() {
+        String time = "2019-01-28 00:00:00";
+        ThreadLocalContext.timezoneThreadLocal.set("UTC");
+        Date utcDate = DateUtils.stringToDate(time);
+
+        Assert.assertEquals(time, DateUtils.dateToString(utcDate));
+
+        ThreadLocalContext.timezoneThreadLocal.set("Asia/Shanghai");
+        Date shanghaiDate = DateUtils.stringToDate(time);
+
+        Assert.assertEquals(time, DateUtils.dateToString(shanghaiDate));
+
+        Assert.assertEquals(Timer.ONE_HOUR * 8, utcDate.getTime() - 
shanghaiDate.getTime());
+    }
 }
diff --git 
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
 
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
index 955a7e9..1135442 100644
--- 
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
+++ 
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
@@ -23,6 +23,7 @@ import org.apache.dolphinscheduler.common.model.TaskNode;
 import org.apache.dolphinscheduler.common.process.Property;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -80,8 +81,8 @@ public class JSONUtilsTest {
         String jsonStr = "{\"a\":\"b\",\"b\":\"d\"}";
 
         ObjectNode objectNode = JSONUtils.createObjectNode();
-        objectNode.put("a","b");
-        objectNode.put("b","d");
+        objectNode.put("a", "b");
+        objectNode.put("b", "d");
         String s = JSONUtils.toJsonString(objectNode);
         Assert.assertEquals(s, jsonStr);
     }
@@ -155,7 +156,7 @@ public class JSONUtilsTest {
         Assert.assertEquals("[1,2,3]", JSONUtils.getNodeString("{\"bar\": 
[1,2,3]}", "bar"));
         Assert.assertEquals("{\"1\":\"2\",\"2\":3}", 
JSONUtils.getNodeString("{\"bar\": {\"1\":\"2\",\"2\":3}}", "bar"));
     }
-    
+
     @Test
     public void testJsonByteArray() {
         String str = "foo";
@@ -258,4 +259,22 @@ public class JSONUtilsTest {
         Assert.assertTrue(true);
     }
 
+    @Test
+    public void dateToString() {
+        String time = "2022-02-22 13:38:24";
+        Date date = DateUtils.stringToDate(time);
+        String json = JSONUtils.toJsonString(date);
+        Assert.assertEquals(json, "\"" + time + "\"");
+
+        String errorFormatTime = "Tue Feb 22 03:50:00 UTC 2022";
+        Assert.assertNull(DateUtils.stringToDate(errorFormatTime));
+    }
+
+    @Test
+    public void stringToDate() {
+        String json = "\"2022-02-22 13:38:24\"";
+        Date date = JSONUtils.parseObject(json, Date.class);
+        Assert.assertEquals(date, DateUtils.stringToDate("2022-02-22 
13:38:24"));
+    }
+
 }
diff --git 
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtilsTest.java
 
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtilsTest.java
index 59b61fd..3bd10f7 100644
--- 
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtilsTest.java
+++ 
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtilsTest.java
@@ -38,7 +38,7 @@ public class TimePlaceholderUtilsTest {
 
     @Before
     public void init() {
-        date = DateUtils.parse("20170101010101", "yyyyMMddHHmmss");
+        date = DateUtils.parse("20170101010101", "yyyyMMddHHmmss", null);
     }
 
     @Test
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AuditLog.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AuditLog.java
index 0705b1b..6cb9821 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AuditLog.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AuditLog.java
@@ -23,7 +23,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 
 @TableName("t_ds_audit_log")
 public class AuditLog {
@@ -63,7 +62,6 @@ public class AuditLog {
     /**
      * operation time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date time;
 
     public Integer getUserId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/CycleDependency.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/CycleDependency.java
index 89a57aa..115f9c5 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/CycleDependency.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/CycleDependency.java
@@ -32,12 +32,10 @@ public class CycleDependency {
     /**
      * last schedule time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date lastScheduleTime;
     /**
      * expiration time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date expirationTime;
     /**
      * cycle enum
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DataSource.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DataSource.java
index b15d0ef..6bd010c 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DataSource.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DataSource.java
@@ -68,13 +68,11 @@ public class DataSource {
   /**
    * create time
    */
-  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
   private Date createTime;
 
   /**
    * update time
    */
-  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
   private Date updateTime;
 
   public DataSource() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqComparisonType.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqComparisonType.java
index 396d3e3..cf35342 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqComparisonType.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqComparisonType.java
@@ -24,7 +24,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 
 @TableName("t_ds_dq_comparison_type")
 public class DqComparisonType implements Serializable {
@@ -62,13 +61,11 @@ public class DqComparisonType implements Serializable {
      * create_time
      */
     @TableField(value = "create_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     /**
      * update_time
      */
     @TableField(value = "update_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqExecuteResult.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqExecuteResult.java
index 4ee6947..7611ce4 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqExecuteResult.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqExecuteResult.java
@@ -147,13 +147,11 @@ public class DqExecuteResult implements Serializable {
      * create_time
      */
     @TableField(value = "create_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     /**
      * update_time
      */
     @TableField(value = "update_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleExecuteSql.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleExecuteSql.java
index 4ce1d4a..dfffe09 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleExecuteSql.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleExecuteSql.java
@@ -26,7 +26,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 
 /**
  * RuleExecuteSql
@@ -67,13 +66,11 @@ public class DqRuleExecuteSql implements Serializable {
      * create_time
      */
     @TableField(value = "create_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     /**
      * update_time
      */
     @TableField(value = "update_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleInputEntry.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleInputEntry.java
index d27e6fa..5e7c259 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleInputEntry.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleInputEntry.java
@@ -28,7 +28,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 
 /**
  * RuleInputEntry
@@ -121,13 +120,11 @@ public class DqRuleInputEntry implements Serializable {
      * create_time
      */
     @TableField(value = "create_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     /**
      * update_time
      */
     @TableField(value = "update_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqTaskStatisticsValue.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqTaskStatisticsValue.java
index 924aec8..f76b97f 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqTaskStatisticsValue.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqTaskStatisticsValue.java
@@ -24,7 +24,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 
 @TableName("t_ds_dq_task_statistics_value")
 public class DqTaskStatisticsValue implements Serializable {
@@ -82,19 +81,16 @@ public class DqTaskStatisticsValue implements Serializable {
      * data time
      */
     @TableField(value = "data_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date dataTime;
     /**
      * create time
      */
     @TableField(value = "create_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     /**
      * update time
      */
     @TableField(value = "update_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Environment.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Environment.java
index ad0f714..a06700e 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Environment.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Environment.java
@@ -55,10 +55,8 @@ public class Environment {
      */
     private Integer operator;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/EnvironmentWorkerGroupRelation.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/EnvironmentWorkerGroupRelation.java
index d1ac972..68e4d46 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/EnvironmentWorkerGroupRelation.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/EnvironmentWorkerGroupRelation.java
@@ -48,10 +48,8 @@ public class EnvironmentWorkerGroupRelation {
      */
     private Integer operator;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ErrorCommand.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ErrorCommand.java
index 20df39b..a57000b 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ErrorCommand.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ErrorCommand.java
@@ -85,13 +85,11 @@ public class ErrorCommand {
     /**
      * schedule time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date scheduleTime;
 
     /**
      * start time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date startTime;
 
     /**
@@ -102,7 +100,6 @@ public class ErrorCommand {
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date updateTime;
 
     /**
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/MonitorRecord.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/MonitorRecord.java
index 1d6ebe0..f460d96 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/MonitorRecord.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/MonitorRecord.java
@@ -58,7 +58,6 @@ public class MonitorRecord {
     /**
      * start date
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date date;
 
     public Flag getState() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessAlertContent.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessAlertContent.java
index e39d3f7..349e64d 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessAlertContent.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessAlertContent.java
@@ -56,10 +56,8 @@ public class ProcessAlertContent implements Serializable {
     private Flag recovery;
     @JsonProperty("runTimes")
     private Integer runTimes;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @JsonProperty("processStartTime")
     private Date processStartTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @JsonProperty("processEndTime")
     private Date processEndTime;
     @JsonProperty("processHost")
@@ -78,10 +76,8 @@ public class ProcessAlertContent implements Serializable {
     private Integer retryTimes;
     @JsonProperty("taskState")
     private ExecutionStatus taskState;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @JsonProperty("taskStartTime")
     private Date taskStartTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @JsonProperty("taskEndTime")
     private Date taskEndTime;
     @JsonProperty("taskHost")
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java
index 5718b5b..c31bded 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java
@@ -100,13 +100,11 @@ public class ProcessDefinition {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     /**
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinitionLog.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinitionLog.java
index 9a20af3..0e18e1c 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinitionLog.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinitionLog.java
@@ -36,7 +36,6 @@ public class ProcessDefinitionLog extends ProcessDefinition {
     /**
      * operateTime
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date operateTime;
 
     public ProcessDefinitionLog() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
index 71c466b..8685e5b 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
@@ -70,13 +70,11 @@ public class ProcessInstance {
     /**
      * start time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date startTime;
 
     /**
      * end time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
     /**
@@ -137,13 +135,11 @@ public class ProcessInstance {
     /**
      * schedule time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date scheduleTime;
 
     /**
      * command start time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date commandStartTime;
 
     /**
@@ -252,7 +248,6 @@ public class ProcessInstance {
     /**
      * re-start time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date restartTime;
 
     public ProcessInstance() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelation.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelation.java
index 06f7cd0..4f999b6 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelation.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelation.java
@@ -26,7 +26,6 @@ import java.util.Objects;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 
@@ -97,13 +96,11 @@ public class ProcessTaskRelation {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public ProcessTaskRelation() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelationLog.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelationLog.java
index 28e89e5..711d016 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelationLog.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelationLog.java
@@ -36,7 +36,6 @@ public class ProcessTaskRelationLog extends 
ProcessTaskRelation {
     /**
      * operate time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date operateTime;
 
     public ProcessTaskRelationLog() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Queue.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Queue.java
index 9c89167..44ab9ae 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Queue.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Queue.java
@@ -46,12 +46,10 @@ public class Queue {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date createTime;
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Resource.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Resource.java
index 7475bf7..4e913f7 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Resource.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Resource.java
@@ -82,13 +82,11 @@ public class Resource {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public Resource() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ResourcesUser.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ResourcesUser.java
index ea8bd6c..c0dbd8d 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ResourcesUser.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ResourcesUser.java
@@ -53,13 +53,11 @@ public class ResourcesUser {
   /**
    * create time
    */
-  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
   private Date createTime;
 
   /**
    * update time
    */
-  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
   private Date updateTime;
 
   public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Schedule.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Schedule.java
index 0d2ea9e..34776e4 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Schedule.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Schedule.java
@@ -66,13 +66,11 @@ public class Schedule {
     /**
      * schedule start time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date startTime;
 
     /**
      * schedule end time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date endTime;
 
     /**
@@ -99,13 +97,11 @@ public class Schedule {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date createTime;
 
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date updateTime;
 
     /**
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Session.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Session.java
index 060d882..59e9612 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Session.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Session.java
@@ -43,7 +43,6 @@ public class Session {
     /**
      * last login time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date lastLoginTime;
 
     /**
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskAlertContent.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskAlertContent.java
index ab37bf2..c0cb3b5 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskAlertContent.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskAlertContent.java
@@ -45,10 +45,8 @@ public class TaskAlertContent implements Serializable {
     private String processInstanceName;
     @JsonProperty("state")
     private ExecutionStatus state;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @JsonProperty("startTime")
     private Date startTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @JsonProperty("endTime")
     private Date endTime;
     @JsonProperty("host")
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinition.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinition.java
index 4d31e23..d78c46a 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinition.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinition.java
@@ -38,7 +38,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -180,13 +179,11 @@ public class TaskDefinition {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     /**
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinitionLog.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinitionLog.java
index 55b8bfb..af6782b 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinitionLog.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinitionLog.java
@@ -36,7 +36,6 @@ public class TaskDefinitionLog extends TaskDefinition {
     /**
      * operate time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date operateTime;
 
     public TaskDefinitionLog() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroup.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroup.java
index 7994f6c..2ec6d3b 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroup.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroup.java
@@ -23,7 +23,6 @@ import java.util.Date;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 
 /**
  * Task Group
@@ -60,12 +59,10 @@ public class TaskGroup implements Serializable {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
     /**
      * project Id
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroupQueue.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroupQueue.java
index 6ab97ae..ae6bee7 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroupQueue.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroupQueue.java
@@ -89,12 +89,10 @@ public class TaskGroupQueue implements Serializable {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public TaskGroupQueue() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
index b4e52c0..8b18195 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
@@ -29,8 +29,6 @@ import 
org.apache.dolphinscheduler.common.task.switchtask.SwitchParameters;
 import org.apache.dolphinscheduler.common.utils.DateUtils;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
 
-import org.apache.commons.lang3.SerializationUtils;
-
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Map;
@@ -39,7 +37,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.core.type.TypeReference;
 
 /**
@@ -100,25 +97,21 @@ public class TaskInstance implements Serializable {
     /**
      * task first submit time.
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date firstSubmitTime;
 
     /**
      * task submit time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date submitTime;
 
     /**
      * task start time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date startTime;
 
     /**
      * task end time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
     /**
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskMainInfo.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskMainInfo.java
index e17392f..35c9a3b 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskMainInfo.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskMainInfo.java
@@ -52,13 +52,11 @@ public class TaskMainInfo {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date taskCreateTime;
 
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date taskUpdateTime;
 
     /**
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskRecord.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskRecord.java
index b267dff..5b849b5 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskRecord.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskRecord.java
@@ -48,13 +48,11 @@ public class TaskRecord {
     /**
      * start date
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date startTime;
 
     /**
      * end date
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date endTime;
 
     /**
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Tenant.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Tenant.java
index 87674fe..c143f91 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Tenant.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Tenant.java
@@ -67,12 +67,10 @@ public class Tenant {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date createTime;
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
 
 
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UDFUser.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UDFUser.java
index fa3fbc2..ee8a568 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UDFUser.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UDFUser.java
@@ -53,13 +53,11 @@ public class UDFUser {
   /**
    * create time
    */
-  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
   private Date createTime;
 
   /**
    * update time
    */
-  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
   private Date updateTime;
 
   public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UdfFunc.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UdfFunc.java
index d76436b..6e3e546 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UdfFunc.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UdfFunc.java
@@ -90,13 +90,11 @@ public class UdfFunc {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date createTime;
 
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/User.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/User.java
index a7445ed..9650778 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/User.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/User.java
@@ -104,13 +104,11 @@ public class  User {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date createTime;
 
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerGroup.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerGroup.java
index b6dc13a..164c764 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerGroup.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerGroup.java
@@ -38,10 +38,8 @@ public class WorkerGroup {
 
     private String addrList;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     @TableField(exist = false)
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerServer.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerServer.java
index 58bf2d2..c6aadf4 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerServer.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerServer.java
@@ -51,13 +51,11 @@ public class WorkerServer {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date createTime;
 
     /**
      * last heart beat time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date lastHeartbeatTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/Constants.java
 
b/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/Constants.java
index 87d1994..3d2cc31 100644
--- 
a/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/Constants.java
+++ 
b/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/Constants.java
@@ -59,4 +59,9 @@ public final class Constants {
     public static final String APPEND = "append";
 
     public static final String SPARK_APP_NAME = "spark.app.name";
+
+    /**
+     * date format of yyyy-MM-dd HH:mm:ss
+     */
+    public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
 }
diff --git 
a/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/JsonUtils.java
 
b/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/JsonUtils.java
index 1f006bd..e35eeaa 100644
--- 
a/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/JsonUtils.java
+++ 
b/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/JsonUtils.java
@@ -24,6 +24,9 @@ import static 
com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN
 import static 
com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS;
 import static 
com.fasterxml.jackson.databind.SerializationFeature.FAIL_ON_EMPTY_BEANS;
 
+import org.apache.dolphinscheduler.data.quality.Constants;
+
+import java.text.SimpleDateFormat;
 import java.util.TimeZone;
 
 import org.slf4j.Logger;
@@ -49,7 +52,8 @@ public class JsonUtils {
             .configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
             .configure(REQUIRE_SETTERS_FOR_GETTERS, true)
             .configure(FAIL_ON_EMPTY_BEANS,false)
-            .setTimeZone(TimeZone.getDefault());
+            .setTimeZone(TimeZone.getDefault())
+            .setDateFormat(new 
SimpleDateFormat(Constants.YYYY_MM_DD_HH_MM_SS));
 
     private JsonUtils() {
         throw new UnsupportedOperationException("Construct JSONUtils");
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
index 22b4a69..92eb973 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
@@ -37,6 +37,8 @@ import 
org.apache.dolphinscheduler.server.master.runner.FailoverExecuteThread;
 import org.apache.dolphinscheduler.server.master.runner.MasterSchedulerService;
 import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
 
+import java.util.TimeZone;
+
 import javax.annotation.PostConstruct;
 
 import org.quartz.Scheduler;
@@ -44,6 +46,7 @@ import org.quartz.SchedulerException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cache.annotation.EnableCaching;
@@ -101,6 +104,9 @@ public class MasterServer implements IStoppable {
     @Autowired
     private LoggerRequestProcessor loggerRequestProcessor;
 
+    @Value("${spring.jackson.time-zone:UTC}")
+    private String timezone;
+
     public static void main(String[] args) {
         Thread.currentThread().setName(Constants.THREAD_NAME_MASTER_SERVER);
         SpringApplication.run(MasterServer.class);
@@ -111,6 +117,8 @@ public class MasterServer implements IStoppable {
      */
     @PostConstruct
     public void run() throws SchedulerException {
+        TimeZone.setDefault(TimeZone.getTimeZone(timezone));
+
         // init remoting server
         NettyServerConfig serverConfig = new NettyServerConfig();
         serverConfig.setListenPort(masterConfig.getListenPort());
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseEvent.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseEvent.java
index 224a617..2378ca0 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseEvent.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseEvent.java
@@ -49,13 +49,11 @@ public class TaskResponseEvent {
     /**
      * start time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date startTime;
 
     /**
      * end time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date endTime;
 
     /**
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThread.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThread.java
index c8c15ae..59deb39 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThread.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThread.java
@@ -706,7 +706,7 @@ public class WorkflowExecuteThread {
         if 
(cmdParam.containsKey(Constants.CMD_PARAM_RECOVERY_START_NODE_STRING)) {
             cmdParam.remove(Constants.CMD_PARAM_RECOVERY_START_NODE_STRING);
         }
-        cmdParam.replace(CMDPARAM_COMPLEMENT_DATA_START_DATE, 
DateUtils.format(scheduleDate, "yyyy-MM-dd HH:mm:ss"));
+        cmdParam.replace(CMDPARAM_COMPLEMENT_DATA_START_DATE, 
DateUtils.format(scheduleDate, "yyyy-MM-dd HH:mm:ss", null));
         command.setCommandParam(JSONUtils.toJsonString(cmdParam));
         command.setTaskDependType(processInstance.getTaskDependType());
         command.setFailureStrategy(processInstance.getFailureStrategy());
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/DependentTaskProcessor.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/DependentTaskProcessor.java
index a2bbae7..aaeaa97 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/DependentTaskProcessor.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/DependentTaskProcessor.java
@@ -36,7 +36,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.google.auto.service.AutoService;
 
 /**
@@ -61,7 +60,6 @@ public class DependentTaskProcessor extends BaseTaskProcessor 
{
     /**
      * dependent date
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date dependentDate;
 
     DependResult result;
diff --git a/dolphinscheduler-master/src/main/resources/application.yaml 
b/dolphinscheduler-master/src/main/resources/application.yaml
index beefc22..0065ce3 100644
--- a/dolphinscheduler-master/src/main/resources/application.yaml
+++ b/dolphinscheduler-master/src/main/resources/application.yaml
@@ -19,6 +19,9 @@ spring:
     banner-mode: off
   application:
     name: master-server
+  jackson:
+    time-zone: UTC
+    date-format: "yyyy-MM-dd HH:mm:ss"
   cache:
     # default enable cache, you can disable by `type: none`
     type: none
diff --git 
a/dolphinscheduler-python/src/main/java/org/apache/dolphinscheduler/server/PythonGatewayServer.java
 
b/dolphinscheduler-python/src/main/java/org/apache/dolphinscheduler/server/PythonGatewayServer.java
index ae97a9d..cea26c7 100644
--- 
a/dolphinscheduler-python/src/main/java/org/apache/dolphinscheduler/server/PythonGatewayServer.java
+++ 
b/dolphinscheduler-python/src/main/java/org/apache/dolphinscheduler/server/PythonGatewayServer.java
@@ -62,6 +62,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.TimeZone;
 import java.util.stream.Collectors;
 
 import javax.annotation.PostConstruct;
@@ -69,6 +70,7 @@ import javax.annotation.PostConstruct;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import 
org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@@ -138,6 +140,14 @@ public class PythonGatewayServer extends 
SpringBootServletInitializer {
     @Autowired
     private PythonGatewayConfig pythonGatewayConfig;
 
+    @Value("${spring.jackson.time-zone:UTC}")
+    private String timezone;
+
+    @PostConstruct
+    public void init() {
+        TimeZone.setDefault(TimeZone.getTimeZone(timezone));
+    }
+
     // TODO replace this user to build in admin user if we make sure build in 
one could not be change
     private final User dummyAdminUser = new User() {
         {
diff --git 
a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteAckCommand.java
 
b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteAckCommand.java
index 96f15ad..17a77e7 100644
--- 
a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteAckCommand.java
+++ 
b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteAckCommand.java
@@ -42,7 +42,6 @@ public class TaskExecuteAckCommand implements Serializable {
     /**
      * startTime
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date startTime;
 
     /**
diff --git 
a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteResponseCommand.java
 
b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteResponseCommand.java
index f114a3f..eafb803 100644
--- 
a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteResponseCommand.java
+++ 
b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteResponseCommand.java
@@ -22,8 +22,6 @@ import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import java.io.Serializable;
 import java.util.Date;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-
 /**
  *  execute task response command
  */
@@ -56,7 +54,6 @@ public class TaskExecuteResponseCommand implements 
Serializable {
     /**
      *  end time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
 
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/LogUtils.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/LogUtils.java
index 6c6c2f2..503d4af 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/LogUtils.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/LogUtils.java
@@ -63,7 +63,7 @@ public class LogUtils {
             .map(TaskLogDiscriminator::getLogBase)
             .map(e -> Paths.get(e)
                 .toAbsolutePath()
-                .resolve(DateUtils.format(firstSubmitTime,Constants.YYYYMMDD))
+                .resolve(DateUtils.format(firstSubmitTime,Constants.YYYYMMDD, 
null))
                 .resolve(taskLogFileName))
             .map(Path::toString)
             .orElse("");
diff --git 
a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/LogUtilsTest.java
 
b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/LogUtilsTest.java
index 06aba92..456ada5 100644
--- 
a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/LogUtilsTest.java
+++ 
b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/LogUtilsTest.java
@@ -65,7 +65,7 @@ public class LogUtilsTest {
 
         Path logPath = Paths.get(".").toAbsolutePath().getParent()
                 .resolve(logBase)
-                .resolve(DateUtils.format(firstSubmitTime, Constants.YYYYMMDD))
+                .resolve(DateUtils.format(firstSubmitTime, Constants.YYYYMMDD, 
null))
                 .resolve("1_1-100-1000.log");
         Assert.assertEquals(logPath.toString(), 
LogUtils.getTaskLogPath(taskExecutionContext));
     }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
 
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/json/DateJsonSerializer.java
similarity index 56%
copy from 
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
copy to 
dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/json/DateJsonSerializer.java
index 7981f8a..c45665a 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
+++ 
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/json/DateJsonSerializer.java
@@ -15,20 +15,23 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.api;
+package org.apache.dolphinscheduler.service.json;
 
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.web.servlet.ServletComponentScan;
-import org.springframework.context.annotation.ComponentScan;
+import org.apache.dolphinscheduler.common.utils.DateUtils;
 
-@ServletComponentScan
-@SpringBootApplication
-@ComponentScan("org.apache.dolphinscheduler")
-public class ApiApplicationServer {
+import java.io.IOException;
+import java.util.Date;
 
-    public static void main(String[] args) {
-        SpringApplication.run(ApiApplicationServer.class);
-    }
+import org.springframework.boot.jackson.JsonComponent;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
 
+@JsonComponent
+public class DateJsonSerializer extends JsonSerializer<Date> {
+    @Override
+    public void serialize(Date value, JsonGenerator gen, SerializerProvider 
serializers) throws IOException {
+        gen.writeString(DateUtils.dateToString(value));
+    }
 }
diff --git 
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/queue/entity/TaskExecutionContext.java
 
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/queue/entity/TaskExecutionContext.java
index 1fede5f..63acf27 100644
--- 
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/queue/entity/TaskExecutionContext.java
+++ 
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/queue/entity/TaskExecutionContext.java
@@ -53,13 +53,11 @@ public class TaskExecutionContext implements Serializable {
     /**
      * task first submit time.
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date firstSubmitTime;
 
     /**
      * task start time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date startTime;
 
     /**
@@ -116,7 +114,6 @@ public class TaskExecutionContext implements Serializable {
     /**
      * process instance schedule time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date scheduleTime;
 
     /**
diff --git 
a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/TaskRequest.java
 
b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/TaskRequest.java
index ab7bea3..df0aa7f 100644
--- 
a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/TaskRequest.java
+++ 
b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/TaskRequest.java
@@ -23,8 +23,6 @@ import org.apache.dolphinscheduler.spi.task.Property;
 import java.util.Date;
 import java.util.Map;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-
 /**
  * to master/worker task transport
  */
@@ -43,13 +41,11 @@ public class TaskRequest {
     /**
      * task first submit time.
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date firstSubmitTime;
 
     /**
      * task start time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date startTime;
 
     /**
@@ -96,7 +92,6 @@ public class TaskRequest {
     /**
      * process instance schedule time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date scheduleTime;
 
     /**
diff --git 
a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/UdfFuncRequest.java
 
b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/UdfFuncRequest.java
index cbbd9e2..67228d6 100644
--- 
a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/UdfFuncRequest.java
+++ 
b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/UdfFuncRequest.java
@@ -83,13 +83,11 @@ public class UdfFuncRequest {
     /**
      * create time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**
      * update time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/utils/JSONUtils.java
 
b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/utils/JSONUtils.java
index 070e62f..5183a16 100644
--- 
a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/utils/JSONUtils.java
+++ 
b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/utils/JSONUtils.java
@@ -25,6 +25,7 @@ import static 
com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN
 import static 
com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS;
 
 import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -62,7 +63,8 @@ public class JSONUtils {
             .configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true)
             .configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
             .configure(REQUIRE_SETTERS_FOR_GETTERS, true)
-            .setTimeZone(TimeZone.getDefault());
+            .setTimeZone(TimeZone.getDefault())
+            .setDateFormat(new 
SimpleDateFormat(Constants.YYYY_MM_DD_HH_MM_SS));
 
     private JSONUtils() {
         throw new UnsupportedOperationException("Construct JSONUtils");
diff --git 
a/dolphinscheduler-standalone-server/src/main/java/org/apache/dolphinscheduler/StandaloneServer.java
 
b/dolphinscheduler-standalone-server/src/main/java/org/apache/dolphinscheduler/StandaloneServer.java
index 9272103..9120521 100644
--- 
a/dolphinscheduler-standalone-server/src/main/java/org/apache/dolphinscheduler/StandaloneServer.java
+++ 
b/dolphinscheduler-standalone-server/src/main/java/org/apache/dolphinscheduler/StandaloneServer.java
@@ -19,14 +19,29 @@ package org.apache.dolphinscheduler;
 
 import org.apache.curator.test.TestingServer;
 
+import java.util.TimeZone;
+
+import javax.annotation.PostConstruct;
+
+import org.quartz.SchedulerException;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 @SpringBootApplication
 public class StandaloneServer {
+
+    @Value("${spring.jackson.time-zone:UTC}")
+    private String timezone;
+
     public static void main(String[] args) throws Exception {
         final TestingServer server = new TestingServer(true);
         System.setProperty("registry.zookeeper.connect-string", 
server.getConnectString());
         SpringApplication.run(StandaloneServer.class, args);
     }
+
+    @PostConstruct
+    public void run() {
+        TimeZone.setDefault(TimeZone.getTimeZone(timezone));
+    }
 }
diff --git 
a/dolphinscheduler-standalone-server/src/main/resources/application.yaml 
b/dolphinscheduler-standalone-server/src/main/resources/application.yaml
index afd3f5d..0598820 100644
--- a/dolphinscheduler-standalone-server/src/main/resources/application.yaml
+++ b/dolphinscheduler-standalone-server/src/main/resources/application.yaml
@@ -18,6 +18,9 @@
 spring:
   application:
     name: standalone-server
+  jackson:
+    time-zone: UTC
+    date-format: "yyyy-MM-dd HH:mm:ss"
   main:
     banner-mode: off
   cache:
@@ -59,8 +62,6 @@ spring:
       org.quartz.scheduler.makeSchedulerThreadDaemon: true
       org.quartz.jobStore.driverDelegateClass: 
org.quartz.impl.jdbcjobstore.StdJDBCDelegate
       org.quartz.jobStore.clusterCheckinInterval: 5000
-  jackson:
-    time-zone: GMT+8
   servlet:
     multipart:
       max-file-size: 1024MB
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleExecuteSql.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleExecuteSql.java
index a2bfbcf..3d1cd4a 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleExecuteSql.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleExecuteSql.java
@@ -55,12 +55,10 @@ public class DqRuleExecuteSql implements Serializable {
     /**
      * create_time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     /**
      * update_time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleInputEntry.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleInputEntry.java
index 6a9d853..0f08b63 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleInputEntry.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleInputEntry.java
@@ -24,8 +24,6 @@ import 
org.apache.dolphinscheduler.spi.task.dq.enums.ValueType;
 import java.io.Serializable;
 import java.util.Date;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-
 /**
  * RuleInputEntry
  */
@@ -98,12 +96,10 @@ public class DqRuleInputEntry implements Serializable {
     /**
      * create_time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     /**
      * update_time
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public int getId() {
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue
index 068ef58..0430cfa 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue
@@ -274,7 +274,8 @@
             schedule: JSON.stringify({
               startTime: this.scheduleTime[0],
               endTime: this.scheduleTime[1],
-              crontab: this.crontab
+              crontab: this.crontab,
+              timezoneId: this.timezoneId
             })
           }
 
diff --git 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
index e51f1d2..592a418 100644
--- 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
+++ 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
@@ -44,12 +44,14 @@ import org.apache.commons.collections4.CollectionUtils;
 
 import java.util.Collection;
 import java.util.Set;
+import java.util.TimeZone;
 
 import javax.annotation.PostConstruct;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.annotation.ComponentScan;
@@ -122,6 +124,9 @@ public class WorkerServer implements IStoppable {
     @Autowired
     private LoggerRequestProcessor loggerRequestProcessor;
 
+    @Value("${spring.jackson.time-zone:UTC}")
+    private String timezone;
+
     /**
      * worker server startup, not use web service
      *
@@ -137,6 +142,8 @@ public class WorkerServer implements IStoppable {
      */
     @PostConstruct
     public void run() {
+        TimeZone.setDefault(TimeZone.getTimeZone(timezone));
+
         // init remoting server
         NettyServerConfig serverConfig = new NettyServerConfig();
         serverConfig.setListenPort(workerConfig.getListenPort());
diff --git 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
index 4e03ba8..dfe411b 100644
--- 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
+++ 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
@@ -378,7 +378,7 @@ public class TaskExecuteThread implements Runnable, Delayed 
{
         // replace variable TIME with $[YYYYmmddd...] in shell file when 
history run job and batch complement job
         if (taskExecutionContext.getScheduleTime() != null) {
             Date date = taskExecutionContext.getScheduleTime();
-            String dateTime = DateUtils.format(date, 
Constants.PARAMETER_FORMAT_TIME);
+            String dateTime = DateUtils.format(date, 
Constants.PARAMETER_FORMAT_TIME, null);
             Property p = new Property();
             p.setValue(dateTime);
             p.setProp(Constants.PARAMETER_DATETIME);
diff --git a/dolphinscheduler-worker/src/main/resources/application.yaml 
b/dolphinscheduler-worker/src/main/resources/application.yaml
index 3f79a32..77c539f 100644
--- a/dolphinscheduler-worker/src/main/resources/application.yaml
+++ b/dolphinscheduler-worker/src/main/resources/application.yaml
@@ -19,6 +19,9 @@ spring:
     banner-mode: off
   application:
     name: worker-server
+  jackson:
+    time-zone: UTC
+    date-format: "yyyy-MM-dd HH:mm:ss"
   datasource:
     driver-class-name: org.postgresql.Driver
     url: jdbc:postgresql://127.0.0.1:5432/dolphinscheduler
diff --git a/script/env/dolphinscheduler_env.sh 
b/script/env/dolphinscheduler_env.sh
index 0e656d0..5e07aab 100755
--- a/script/env/dolphinscheduler_env.sh
+++ b/script/env/dolphinscheduler_env.sh
@@ -27,6 +27,7 @@ export DATAX_HOME=${DATAX_HOME:-/opt/soft/datax}
 
 export 
PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME/bin:$PATH
 
+export SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-UTC}
 export DATABASE=${DATABASE:-postgresql}
 export SPRING_PROFILES_ACTIVE=${DATABASE}
 export SPRING_DATASOURCE_DRIVER_CLASS_NAME

Reply via email to