2016-12-14 3 views
1

У меня есть требование, когда я получаю дату и время из базы данных. Для США существует несколько часовых поясов. Поэтому я хочу преобразовать время, которое поступает из БД в текущий часовой пояс.конвертировать время в США в разных часовых поясах

i.e Я хочу что-то вроде, в DB время хранится как формат GMT, но вы хотите преобразовать это время в PST для пользователя PST, MST для пользователя MST, CST для пользователя CST и EST для пользователя EST.

Редактировать: Каким-то образом я могу получить время для разного часового пояса.

public static void main(String[] args) { 
     Calendar localTime = Calendar.getInstance(); 
     localTime.setTime(new Date()); 
     System.out.println("PST::"+getTimeByTimezone("PST",localTime)); 
     System.out.println("MST::"+getTimeByTimezone("MST",localTime)); 
     System.out.println("CST::"+getTimeByTimezone("CST",localTime)); 
     System.out.println("EST::"+getTimeByTimezone("EST",localTime)); 
    } 

    public static String getTimeByTimezone(String timeZone,Calendar localTime){  

     Calendar indiaTime = new GregorianCalendar(TimeZone.getTimeZone(timeZone)); 
     indiaTime.setTimeInMillis(localTime.getTimeInMillis()); 
     int hour = indiaTime.get(Calendar.HOUR); 
     int minute = indiaTime.get(Calendar.MINUTE); 
     int second = indiaTime.get(Calendar.SECOND); 
     int year = indiaTime.get(Calendar.YEAR); 
     //System.out.printf("India time: %02d:%02d:%02d %02d\n", hour, minute, second, year); 
     return hour+":"+minute; 

    } 

Но я хочу изменить время, которое уже опубликовано на странице.

+0

Я подозреваю, что вы действительно не хотите PST - я подозреваю, что вы хотите «Тихоокеанское время» и т. Д. Итак, у вас есть соответствующий часовой пояс? Что вы пробовали до сих пор, и что случилось? На данный момент этот вопрос неясен. A [mcve] действительно поможет ... –

+0

Что вы подразумеваете под * «Но я хочу преобразовать время, которое уже опубликовано на странице» *? Вопрос, связанный с этим, заключается в преобразовании времени GMT из базы данных в пользовательский часовой пояс, так что это связано с тем, что уже «опубликовано» *, что бы это ни значило? – Andreas

+0

Конечно, формат GMT публикуется на странице, который мне нужно преобразовать в другой часовой пояс – Akash

ответ

4

Вы можете использовать ZonedDateTime в Java 8:

public String getZonedDateString(Date date, ZoneId targetZoneId) { 
    ZoneId zoneId = ZoneOffset.UTC; // This should be the zone of your database 
    ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(date.toInstant(), zoneId); 
    ZonedDateTime newZonedDateTime = zonedDateTime.withZoneSameInstant(targetZoneId); 
    return DateTimeFormatter.ofPattern("MMM d yyy hh:mm") .format(newZonedDateTime); 
} 

Использование:

Date date = new Date(); 
ZoneOffset newZoneId = ZoneOffset.of(ZoneId.SHORT_IDS.get("MST")); 
String dateString = getZonedDateString(date, newZoneId); 

Смотрите здесь, как использовать ZoneOffset


Pre Java 8:

public String getZonedDateString(Date date, TimeZone targetZone) { 
    SimpleDateFormat format = new SimpleDateFormat("MMM d yyy hh:mm"); 
    format.setTimeZone(targetZone); 
    return format.format(date); 
} 

Использование:

TimeZone targetZone = TimeZone.getTimeZone("MST"); 
String dateString = getZonedDateString(date, targetZone); 

Смотрите здесь, как использовать TimeZone

+0

Я использую JDK7, можем ли мы использовать какие-либо другой класс, посвященный ZonedDateTIme? – Akash

+0

Обновлен ответ – JDC

0

Он работал прекрасно для меня. Теперь я могу конвертировать часовой пояс в PST.

DateFormat gmtFormat = new SimpleDateFormat("HH:mm"); 
     gmtFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 

     Date date = null; 
     try { 
      date = gmtFormat.parse("11:10"); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     DateFormat pstFormat = new SimpleDateFormat("HH:mm"); 
     pstFormat.setTimeZone(TimeZone.getTimeZone("PST")); 

     String timedd = pstFormat.format(date); 
     System.out.println(pstFormat.format(date)); 
Смежные вопросы