узнать время по Гринвичу из локали

1

Я столкнулся с одним вопросом. Предположим, что пользователь регистрируется на моем сайте в 2014-12-24 01:00 из Китая, поэтому я хранил его вовремя. Теперь, если он снова вошел в систему из Франции, так что мне нужно показать его последний вход во времени в соответствии с часовым поясом Франции, 2014-12-23 17:00 по Гринвичу. У меня есть локальная информация пользователя, откуда он входит. Это мой код:

String lastLoggedIndatetime = "2014-11-23 04:01" ; //time of last logged in from China; 
Locale locale = Locale.FRANCE; //suppose this i am getting as args from Http request

SimpleDateFormat loggedInDateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm");
Calendar c = Calendar.getInstance(locale);
TimeZone loggedInTimeZone = c.getTimeZone();
System.out.println("Time Zone is "+ c.getTimeZone().getDisplayName());

SimpleDateFormat gmtFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm");
TimeZone gmtTimeZone = TimeZone.getTimeZone("GMT");
gmtFormat.setTimeZone(gmtTimeZone);
try {
    String lastLoggedIndatetimeAsPerFrance = loggedInDateFormat.format(new SimpleDateFormat("yyyy-mm-dd hh:mm").parse(lastLoggedIndatetime.trim()));
    String gmtDateTime= gmtFormat.format(new SimpleDateFormat("yyyy-mm-dd hh:mm").parse(lastLoggedIndatetimeAsPerFrance.trim()));
    System.out.println("last logged in Date as per France is "+ lastLoggedIndatetimeAsPerFrance + "  TimeZone is "+loggedInTimeZone);
    System.out.println("GMT Date is "+ gmtDateTime + "  TimeZone is "+ gmtTimeZone); 
    //formattedDate.append(gmtDateTime)
    //.append(" - "); //" - " is delimiter for date
} catch (ParseException ex) {
    Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex);
}

И выход:

Time Zone is India Standard Time
last logged in Date as per France is 2014-01-23 04:01  TimeZone is sun.util.calendar.ZoneInfo[id="Asia/Calcutta",offset=19800000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]

GMT Date is 2014-31-22 10:31  TimeZone is sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]

он не показывает время по Франции, а по Индии (в настоящее время я в Индии). Также GMT по Индии, а не по Франции.

  • 0
    Вы не передаете информацию о locale в SimpleDateFormat , можете ли вы попытаться передать locale
  • 0
    все еще не работает, получая то же самое o / p :: Часовой пояс - стандартное время Индии
Теги:
datetime
locale

2 ответа

1

вам нужно установить TimeZone в экземпляре Calendar прежде чем выполнять какую-либо операцию.

Calendar c = Calendar.getInstance(locale);
c.setTimeZone(TimeZone.getTimeZone("Europe/Paris")); //like this
TimeZone loggedInTimeZone = c.getTimeZone();
0

Вы не можете определить часовой пояс из локали. Локаль может быть выбран пользователем для своего браузера, независимо от того, где находится пользователь. Кроме того, многие локали охватывают многие часовые пояса. Если вы хотите узнать часовой пояс пользователя, вы можете попытаться угадать, просмотрев местоположение ip-адреса, или вы можете предложить пользователю рассказать вам, где они находятся.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню