IT

자바 영역을 GMT / UTC로 강제 적용

lottoking 2020. 9. 16. 07:57
반응형

자바 영역을 GMT / UTC로 강제 적용


컴퓨터에 관계를 관계없이 GMT / UTC로 강제 적용해야합니다. 코드에서 어디에 있습니까?

서버하기 위해 모든 작업에 DB 서버 시간을 사용하고 현지 서버에 따라 형식이 나옵니다.

감사합니다!


OP는이 질문에 응답하여 실행중인 JVM의 단일 인스턴스에 대한 기본 제공을 변경하고 user.timezone시스템 속성을 설정합니다 .

java -Duser.timezone=GMT ... <main-class>

데이터베이스에서 날짜 / 시간 / 타임 스탬프를 검색 할 object-때 특정 시간대를 설정 해야하는 경우 object-를 ResultSet사용하는 두-th 형식의 getXXX메서드를 사용 Calendar합니다.

Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
ResultSet rs = ...;
while (rs.next()) {
    Date dateValue = rs.getDate("DateColumn", tzCal);
    // Other fields and calculations
}

또는 PreparedStatement에서 날짜 설정 :

Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
PreparedStatement ps = conn.createPreparedStatement("update ...");
ps.setDate("DateColumn", dateValue, tzCal);
// Other assignments
ps.executeUpdate();

이렇게하면 데이터베이스 열이 데이터베이스에 유지되지 않을 때 데이터베이스에 유지됩니다.

java.util.Datejava.sql.Date클래스는 UTC의 실제 시간 (밀리 초)을 저장합니다. 출력시 다른 의미로 형식을 지정 비용 SimpleDateFormat. 캘린더 개체를 사용하여 존재하는 값과 성능이 있습니다.

TimeZone tz = TimeZone.getTimeZone("<local-time-zone>");
//...
Date dateValue = rs.getDate("DateColumn");
Calendar calValue = Calendar.getInstance(tz);
calValue.setTime(dateValue);

유용한 참조

https://docs.oracle.com/javase/9/troubleshoot/time-zone-settings-jre.htm#JSTGD377

https://confluence.atlassian.com/kb/setting-the-timezone-for-the-java-environment-841187402.html


또한 이런 식으로 JVM 상황을 접근 할 수 있습니다.

System.setProperty("user.timezone", "EST");

또는 -Duser.timezone=GMTJVM 인수에서.


Windows 2003 Server의 JVM은 항상 새로운 날짜 ()에 대해 GMT를 반환하기 때문에 설정해야합니다.

-Duser.timezone=America/Los_Angeles

또는 적절한 의미. 포함 목록을 찾는 것도 어려웠습니다.

다음은 두 가지 목록입니다.

http://wrapper.tanukisoftware.com/doc/english/prop-timezone.html

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzatz%2F51%2Fadmin%2Freftz.htm


저에게는 빠른 SimpleDateFormat,

  private static final SimpleDateFormat GMT = new SimpleDateFormat("yyyy-MM-dd");
  private static final SimpleDateFormat SYD = new SimpleDateFormat("yyyy-MM-dd");
  static {
      GMT.setTimeZone(TimeZone.getTimeZone("GMT"));
    SYD.setTimeZone(TimeZone.getTimeZone("Australia/Sydney"));
  }

그런 다음 다음 날짜로 날짜 형식을 지정하십시오.


DB에서 원시 형식 (긴 타임 스탬프 또는 자바의 날짜)으로 시간을 검색 한 다음 SimpleDateFormat을 사용하여 형식을 지정하거나 달력을 사용하여 조작합니다. 두 경우 모두 사용하기 전에 선언의 경우를 설정해야합니다.

자세한 내용은 SimpleDateFormat.setTimeZone(..)Calendar.setTimeZone(..)참조


TimeZone.setDefault () 사용하여 해당 기능을 사용할 수 있습니다 .

TimeZone.setDefault(TimeZone.getTimeZone("GMT"))

실행 후 클라이언트 서버가 정확한 시간과 날짜를 보내도록 클라이언트 / 서버 쌍을 만듭니다. 그런 다음 클라이언트는 서버 pm GMT에 요청하고 서버는 바로 응답을 보냅니다.


와. 나는 이것이 고대 스레드라는 것을 알고 있지만 내가 말할 수있는 것은 사용자 수준 코드에서 TimeZone.setDefault ()를 호출하지 않는 것입니다. 이것은 항상 전체 JVM의 시간대를 설정하며 거의 항상 매우 나쁜 생각입니다. joda.time 라이브러리 또는 joda.time 라이브러리와 매우 유사한 Java 8의 새로운 DateTime 클래스를 사용하는 방법을 배웁니다.


시스템 속성 사용 :

-Duser.timezone=UTC

intiger로만 GMT 시간을 얻으려면 : var currentTime = new Date (); var currentYear = '2010'var currentMonth = 10; var currentDay = '30 'var currentHours = '20'var currentMinutes = '20 'var currentSeconds = '00'var currentMilliseconds = '00 '

currentTime.setFullYear(currentYear);
currentTime.setMonth((currentMonth-1)); //0is January
currentTime.setDate(currentDay);  
currentTime.setHours(currentHours);
currentTime.setMinutes(currentMinutes);
currentTime.setSeconds(currentSeconds);
currentTime.setMilliseconds(currentMilliseconds);

var currentTimezone = currentTime.getTimezoneOffset();
currentTimezone = (currentTimezone/60) * -1;
var gmt ="";
if (currentTimezone !== 0) {
  gmt += currentTimezone > 0 ? ' +' : ' ';
  gmt += currentTimezone;
}
alert(gmt)

참고 URL : https://stackoverflow.com/questions/2627992/force-java-timezone-as-gmt-utc

반응형