Calendar.getInstance(TimeZone.getTimeZone("UTC")))가 UTC 시간을 반환하지 않습니다.
나는 내가 얻는 결과에 대해 매우 혼란스럽다.Calendar.getInstance(TimeZone.getTimeZone("UTC"))
메서드 호출, IST 시간을 반환합니다.
여기 제가 사용한 코드가 있습니다.
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
그리고 제가 받은 답변은 다음과 같다.
Sat Jan 25 15:44:18 IST 2014
그래서 디폴트 타임존을 UTC로 변경해보고 확인해보니 정상적으로 동작하고 있습니다.
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
TimeZone tz = TimeZone.getDefault() ;
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());
TimeZone.setDefault(tz);
결과:
Sat Jan 25 16:09:11 IST 2014
Sat Jan 25 10:39:11 UTC 2014
내가 뭘 빠트렸나요?
그System.out.println(cal_Two.getTime())
호출은 a를 반환합니다.Date
부터getTime()
바로 그입니다.Date
스트링으로 변환됩니다.println
이 변환에서는 디폴트가 사용됩니다.IST
타임존을 선택합니다.
명시적으로 사용할 필요가 있습니다.DateFormat.setTimeZone()
인쇄하다Date
원하는 타임존으로 이동합니다.
편집: @Laurynas님, 다음 사항을 고려하십시오.
TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("EE MMM dd HH:mm:ss zzz yyyy", Locale.US);
simpleDateFormat.setTimeZone(timeZone);
System.out.println("Time zone: " + timeZone.getID());
System.out.println("default time zone: " + TimeZone.getDefault().getID());
System.out.println();
System.out.println("UTC: " + simpleDateFormat.format(calendar.getTime()));
System.out.println("Default: " + calendar.getTime());
java.util.Date
는 타임존에 의존하지 않습니다.인쇄할 때cal_Two
하지만Calendar
인스턴스의 타임존이 로 설정되어 있다.UTC
,cal_Two.getTime()
을 반환하다Date
표준 시간대가 없는 인스턴스(항상 기본 표준 시간대에 있음)
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
System.out.println(cal_Two.getTimeZone());
출력:
Sat Jan 25 16:40:28 IST 2014
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
의 javadoc에서TimeZone.setDefault()
getDefault 메서드로 반환되는 TimeZone을 설정합니다.존이 null인 경우 VM을 처음 시작했을 때의 값으로 기본값을 재설정합니다.
그 때문에, 이동은setDefault()
전에cal_Two
인스턴스화되면 올바른 결과를 얻을 수 있습니다.
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());
출력:
Sat Jan 25 11:15:29 UTC 2014
Sat Jan 25 11:15:29 UTC 2014
확실히 작은 것이 없습니다.즉, 디폴트값을 설정하지 않는 것입니다.
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
코드는 다음과 같습니다.
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
설명:표준 시간대를 변경하려면 다음 명령을 사용하여 기본 표준 시간대를 설정합니다.TimeZone.setDefault()
Calendar currentTime = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
currentTime.set(Calendar.ZONE_OFFSET, TimeZone.getTimeZone("UTC").getRawOffset());
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, currentTime.get(Calendar.HOUR_OF_DAY));
calendar.getTimeInMillis()
나에게 효과가 있다
Following code is the simple example to change the timezone
public static void main(String[] args) {
//get time zone
TimeZone timeZone1 = TimeZone.getTimeZone("Asia/Colombo");
Calendar calendar = new GregorianCalendar();
//setting required timeZone
calendar.setTimeZone(timeZone1);
System.out.println("Time :" + calendar.get(Calendar.HOUR_OF_DAY)+":"+calendar.get(Calendar.MINUTE)+":"+calendar.get(Calendar.SECOND));
}
타임존 목록을 보고 싶다면, 다음은 코드입니다.
public static void main(String[] args) {
String[] ids = TimeZone.getAvailableIDs();
for (String id : ids) {
System.out.println(displayTimeZone(TimeZone.getTimeZone(id)));
}
System.out.println("\nTotal TimeZone ID " + ids.length);
}
private static String displayTimeZone(TimeZone tz) {
long hours = TimeUnit.MILLISECONDS.toHours(tz.getRawOffset());
long minutes = TimeUnit.MILLISECONDS.toMinutes(tz.getRawOffset())
- TimeUnit.HOURS.toMinutes(hours);
// avoid -4:-30 issue
minutes = Math.abs(minutes);
String result = "";
if (hours > 0) {
result = String.format("(GMT+%d:%02d) %s", hours, minutes, tz.getID());
} else {
result = String.format("(GMT%d:%02d) %s", hours, minutes, tz.getID());
}
return result;
}
나한텐 효과가 있어.
타임스탬프 유형 가져오기:
public static Timestamp getCurrentTimestamp() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
final Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
Timestamp ts = new Timestamp(date.getTime());
return ts;
}
문자열 유형 가져오기:
public static String getCurrentTimestamp() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
final Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
Timestamp ts = new Timestamp(date.getTime());
return ts.toString();
}
사용해보십시오.GMT
대신UTC
같은 시간대를 가리키지만 이름은GMT
더 흔하고 효과가 있을 수 있습니다.
언급URL : https://stackoverflow.com/questions/21349475/calendar-getinstancetimezone-gettimezoneutc-is-not-returning-utc-time
'programing' 카테고리의 다른 글
PHMailer로 이메일 보내기 - 이미지를 본문에 포함 (0) | 2022.11.07 |
---|---|
ID가 일치하지 않는 SQL 행을 다른 테이블에서 삭제합니다. (0) | 2022.11.07 |
IntelliJ IDEA의 잘못된 Manifest.mf가 .jar를 만들었습니다. (0) | 2022.11.07 |
JavaScript - 키 값 쌍에 대한 루프 내 (0) | 2022.11.07 |
Django Queryset에서 필터 이하를 수행하는 방법 (0) | 2022.11.07 |