diff --git a/engine/src/main/java/com/arcadedb/query/sql/function/time/SQLFunctionDate.java b/engine/src/main/java/com/arcadedb/query/sql/function/time/SQLFunctionDate.java index 1fd50a6dd..31ffbed1c 100644 --- a/engine/src/main/java/com/arcadedb/query/sql/function/time/SQLFunctionDate.java +++ b/engine/src/main/java/com/arcadedb/query/sql/function/time/SQLFunctionDate.java @@ -51,7 +51,7 @@ public Object execute(final Object iThis, final Identifiable iCurrentRecord, fin if (iParams.length == 0 || iParams[0] == null) date = LocalDateTime.now(); else if (iParams[0] instanceof Number) - date = DateUtils.millisToLocalDateTime(((Number) iParams[0]).longValue()); + date = DateUtils.millisToLocalDateTime(((Number) iParams[0]).longValue(), null); else if (iParams[0] instanceof String) { try { final String dateAsString = (String) iParams[0]; diff --git a/engine/src/main/java/com/arcadedb/utility/DateUtils.java b/engine/src/main/java/com/arcadedb/utility/DateUtils.java index 795789c43..53ac241ee 100755 --- a/engine/src/main/java/com/arcadedb/utility/DateUtils.java +++ b/engine/src/main/java/com/arcadedb/utility/DateUtils.java @@ -335,8 +335,10 @@ else if (obj instanceof LocalDateTime || obj instanceof ZonedDateTime || obj ins return highestPrecision; } - public static LocalDateTime millisToLocalDateTime(final long millis) { - return Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()).toLocalDateTime(); + public static LocalDateTime millisToLocalDateTime(final long millis, final String timeZone) { + if (timeZone == null) + return Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()).toLocalDateTime(); + return Instant.ofEpochMilli(millis).atZone(ZoneId.of(timeZone)).toLocalDateTime(); } public static LocalDate millisToLocalDate(final long millis) { @@ -344,12 +346,16 @@ public static LocalDate millisToLocalDate(final long millis) { } public static String format(final Object obj, final String format) { + return format(obj, format, null); + } + + public static String format(final Object obj, final String format, final String timeZone) { if (obj instanceof Number) - return getFormatter(format).format(millisToLocalDateTime(((Number) obj).longValue())); + return getFormatter(format).format(millisToLocalDateTime(((Number) obj).longValue(), timeZone)); else if (obj instanceof Date) - return getFormatter(format).format(millisToLocalDateTime(((Date) obj).getTime())); + return getFormatter(format).format(millisToLocalDateTime(((Date) obj).getTime(), timeZone)); else if (obj instanceof Calendar) - return getFormatter(format).format(millisToLocalDateTime(((Calendar) obj).getTimeInMillis())); + return getFormatter(format).format(millisToLocalDateTime(((Calendar) obj).getTimeInMillis(), timeZone)); else if (obj instanceof TemporalAccessor) return getFormatter(format).format((TemporalAccessor) obj); return null;