Я видел Принудительно использовать часовой пояс Java как GMT/UTC
Я пытался
user.timezone=UTC в config/application.propertiesuser.timezone=GMTВ файле pom.xml:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<properties>
<spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
</properties>
</configuration>
</plugin>
Но он распечатывает
System.out.println(TimeZone.getDefault());
sun.util.calendar.ZoneInfo[id = "America/New_York",offset=-18000000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]
Весенняя загрузка 1.5.19, Java 8




Используйте spring-boot.run.jvmArguments свойство, если вы хотите передать параметры JVM из плагина Maven Spring Boot в разветвленное приложение Spring Boot:
<properties>
<spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
</properties>
Это эквивалентно синтаксису командной строки:
mvn spring-boot:run -Dspring-boot.run.jvmArguments = "-Duser.timezone=UTC"
или при запуске полностью упакованного приложения Spring Boot:
java -Duser.timezone=UTC -jar app.jar
Первый вариант <properties не сработал. Он по-прежнему печатает id = "America/New_York". Второй вариант -Dspring-boot.run.jvmArguments... тоже не сработал.
@Chloe работает на меня с -Dspring-boot.run.jvmArguments = "-Duser.timezone=UTC" или -Dspring-boot.run.jvmArguments = "-Duser.timezone=America/New_York с Spring Boot 2.1.2.RELEASE и Java 11. Проект создан с помощью start.spring.io.
Я понимаю. Должна быть ошибка в v1 и исправлена в v2. java -Duser.timezone=UTC -jar target\App-SNAPSHOT.warделает работает.
<properties> <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments> </properties> это не сработало, но если вместо этого вы используете jvmArguments, это сработало для меня. ссылка: docs.spring.io/spring-boot/docs/2.2.2.RELEASE/maven-plugin/… так же просто, как: <jvmArguments>-Duser.timezone=UTC</jvmArguments>
Обратите внимание, что jvmArguments применяются только в том случае, если вы также установили для свойства fork значение true. Однако мне удалось заставить его работать с mvn spring-boot:run -Duser.timezone=UTC.
@KarolDowbecki, есть ли возможность поместить это в файл application.properties?
Вы можете настроить часовой пояс с помощью класса, аннотированного аннотацией @Configuration. Вы можете разместить его в любом месте вашего проекта. Я обычно помещаю все классы, подходящие под эту категорию, в пакет под названием config. Убедитесь, что вы добавили аннотацию @PostConstruct к методу, который фактически устанавливает часовой пояс.
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
@Configuration
public class LocaleConfig {
@PostConstruct
public void init() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
System.out.println("Date in UTC: " + new Date().toString());
}
}
Я думаю, вы можете установить часовой пояс вашего приложения на уровне вашего приложения. Я думаю, что эта ссылка поможет вам. https://www.onlinetutorialspoint.com/spring-boot/how-to-set-spring-boot-settimezone.html
Итак, что вам нужно сделать, это добавить аннотацию «@PostConstruct» в основной класс, где находится аннотация «@SpringBootApplication», и добавить туда метод настройки часового пояса. Вот пример.
@SpringBootApplication
public class HellotimezoneApplication {
public static void main(String[] args) {
SpringApplication.run(HellotimezoneApplication.class, args);
}
@PostConstruct
public void init(){
// Setting Spring Boot SetTimeZone
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
}
Надеюсь, это поможет вам!
Это не будет работать для кода, который запускается до вызова метода init(), например. Инициализация JVM или конструкции bean-компонентов Spring. Во всяком случае, было бы более разумно сделать это в методе main(), но надежный способ - использовать параметры -D.
Дополнительные параметры, если ваше приложение работает под Linux:
TZСм. «В системах POSIX пользователь может указать часовой пояс с помощью переменной среды TZ» (https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html).
Эта опция особенно полезна в любой облачной среде.
/etc/locatimeт.е. в моей локальной системе символические ссылки /etc/locatime на /usr/share/zoneinfo/Europe/Berlin:
➜ ls -l /etc/localtime
lrwxrwxrwx 1 root root 33 22. Jan 23:01 /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin
Вы можете легко изменить символическую ссылку с помощью ln -s /usr/share/zoneinfo/GMT /etc/localtime, возможные значения можно найти в /usr/share/zoneinfo/.
Этот параметр также можно использовать во многих облачных средах путем монтирования хост-тома, см. часовой пояс kubernetes в POD с командой и аргументом.
<properties> <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments> </properties>
Это не сработало для меня.
Но если вместо этого вы используете jvmАргументы, это сработало для меня. Ссылка: https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/html/…
просто <configuration> <jvmArguments>-Duser.timezone=UTC</jvmArguments> </configuration>
Это работает для Spring Boot v1:
mvn spring-boot:run -Drun.jvmArguments = "-Duser.timezone=UTC"