1 /*******************************************************************************
2 * Copyright (c) 2016 hangum.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the GNU Lesser Public License v2.1
5 * which accompanies this distribution, and is available at
6 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
9 * hangum - initial API and implementation
10 ******************************************************************************/
11 package com
.hangum
.tadpole
.engine
.utils
;
13 import java
.text
.SimpleDateFormat
;
14 import java
.util
.Date
;
17 import org
.apache
.commons
.lang
.StringUtils
;
18 import org
.apache
.log4j
.Logger
;
19 //import org.joda.time.DateTime;
20 //import org.joda.time.DateTimeZone;
21 //import org.joda.time.format.DateTimeFormat;
22 //import org.joda.time.format.DateTimeFormatter;
23 import org
.joda
.time
.DateTime
;
24 import org
.joda
.time
.DateTimeZone
;
25 import org
.joda
.time
.format
.DateTimeFormat
;
26 import org
.joda
.time
.format
.DateTimeFormatter
;
28 import com
.hangum
.tadpole
.preference
.define
.GetAdminPreference
;
29 import com
.hangum
.tadpole
.session
.manager
.SessionManager
;
32 * utc로 저장되어 있는 시간을 사용자가 원하는 시간대로 바꾸어 보여줍니다.
37 public class TimeZoneUtil
{
38 private static final Logger logger
= Logger
.getLogger(TimeZoneUtil
.class);
45 public static Set
<String
> getTimezoneList() {
46 return DateTimeZone
.getAvailableIDs();
50 * db의 timezone 이 있다면 사용자의 타임존으로 바꿔준다.
55 public static String
dateToStr(Date date
) {
56 String dbTimeZone
= GetAdminPreference
.getDBTimezone();
58 // db의 timezone 없다면 기본 시간으로 바꾼다.
59 if(StringUtils
.isEmpty(dbTimeZone
)) {
60 SimpleDateFormat sdf
= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
61 return sdf
.format(date
);
63 // 서버 타임 UTC를 로컬 타임존으로 변경합니다.
64 DateTime targetDateTime
= new DateTime(date
).withZone(DateTimeZone
.forID(SessionManager
.getTimezone()));
65 String strPretty
= targetDateTime
.toString(prettyDateTimeFormater());
67 // if(logger.isDebugEnabled()) {
68 // logger.debug(String.format("[SessionManager dbTimezone] %s => %s", SessionManager.getTimezone(), targetDateTime));
69 // logger.debug(String.format("[strPretty] %s", strPretty));
70 // logger.debug("===============================================================");
78 * 사용자 로컬 타임존을 서버의 타임존으로 바꿔준다.
80 * @param localTimeMills
83 public static long chageTimeZone(long localTimeMills
) {
84 String dbTimeZone
= GetAdminPreference
.getDBTimezone();
85 // db의 timezone 없다면 기본 시간으로 바꾼다.
86 if(StringUtils
.isEmpty(dbTimeZone
)) {
87 return localTimeMills
;
89 // 서버 타임 UTC를 로컬 타임존으로 변경합니다.
90 DateTime sourceDateTime
= new DateTime(localTimeMills
, DateTimeZone
.forID(SessionManager
.getTimezone()));
91 DateTime targetDateTime
= sourceDateTime
.withZone(DateTimeZone
.forID(dbTimeZone
));
92 if(logger
.isDebugEnabled()) {
93 logger
.debug(String
.format("[SessionManager dbTimezone] %s => %s => %s", SessionManager
.getTimezone(), localTimeMills
, sourceDateTime
.toString()));
94 logger
.debug(String
.format("[targetDateTime] %s => %s", targetDateTime
.getMillis(), targetDateTime
.toString()));
95 logger
.debug("===============================================================");
98 return targetDateTime
.getMillis();
107 public static DateTimeFormatter
prettyDateTimeFormater() {
108 DateTimeFormatter dtf
= DateTimeFormat
.forPattern("yyyy-MM-dd HH:mm:ss");
113 // * sample date time
116 // public static void main(String[] args) {
117 //// DateTimeZone timeZoneUTC = DateTimeZone.forID( "UTC" );
118 //// DateTimeZone timeZoneLondon = DateTimeZone.forID( "Europe/London" );
119 //// DateTimeZone timeZoneKolkata = DateTimeZone.forID( "Asia/Kolkata" );
120 //// DateTimeZone timeZoneNewYork = DateTimeZone.forID( "America/New_York" );
121 // DateTimeZone timeAsiaSeoul = DateTimeZone.forID( "Asia/Seoul" );
123 // DateTime nowSeoul = DateTime.now( timeAsiaSeoul );
124 // System.out.println(String.format("=%s:%s", "nowSeoul", nowSeoul) );
127 // DateTime nowUtcnowSeoul = nowSeoul.withZone( DateTimeZone.UTC ); // Built-in constant for UTC.
128 // System.out.println(String.format("=%s:%s", "nowUtcnowSeoul", nowUtcnowSeoul) );
136 // private static String defaultTime(Date date) {
137 // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
138 // return sdf.format(date);