Как конвертировать дату и время из одного часового пояса в другой часовой пояс - PullRequest
8 голосов
/ 23 ноября 2011

Записи сохраняются в соответствии с часовым поясом США, но если я хочу показать ту же запись пользователю, она должна преобразовать дату и время сервера с (Часовой пояс США) в время пользователя с часовым поясом пользователя

Ответы [ 5 ]

12 голосов
/ 23 ноября 2011

Если вы введете в Google "Часовой пояс изменения даты Java" или "Часовой пояс изменения даты Javascript".У вас будет один из ваших результатов:

На Java (источник: http://www.coderanch.com/t/417443/java/java/Convert-Date-one-timezone-another)

Date date = new Date();  

DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");  
formatter.setTimeZone(TimeZone.getTimeZone("CET"));  

// Prints the date in the CET timezone  
System.out.println(formatter.format(date));  

// Set the formatter to use a different timezone  
formatter.setTimeZone(TimeZone.getTimeZone("IST"));  

// Prints the date in the IST timezone  
System.out.println(formatter.format(date));  

Javascript (источник: http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329)

// function to calculate local time
// in a different city
// given the city's UTC offset
function calcTime(city, offset) {

    // create Date object for current location
    d = new Date();

    // convert to msec
    // add local time zone offset
    // get UTC time in msec
    utc = d.getTime() + (d.getTimezoneOffset() * 60000);

    // create new Date object for different city
    // using supplied offset
    nd = new Date(utc + (3600000*offset));

    // return time as a string
    return "The local time in " + city + " is " + nd.toLocaleString();

}

// get Bombay time
alert(calcTime('Bombay', '+5.5'));
9 голосов
/ 01 апреля 2016

java.time

Старые классы даты и времени плохо разработаны, сбивают с толку и создают проблемы.Избегайте их.

Используйте современные классы: фреймворк java.time , встроенный в Java 8 и более поздние версии.Найдите обратные порты для более ранних версий Java 6 & 7 и для Android .

Instant - это момент на временной шкале в UTC .

Instant now = Instant.now();

Применить часовой пояс (ZoneId), чтобы получить ZonedDateTime.

Никогда не используйте 3-4-буквенные аббревиатуры зоны, такие как EST или IST.Они не стандартизированы и не уникальны (!).Используйте правильные имена часовых поясов , построенные в формате continent/region, например Asia/Kolkata, Pacific/Auckland, America/Los_Angeles.

ZoneId zoneId_Montreal = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt_Montreal = ZonedDateTime.ofInstant( instant , zoneId_Montreal );

Применение другого часового пояса для создания другого ZonedDateTime, настроенного на этот часовой пояс.Позвоните withZoneSameInstant.

ZoneId zoneId_Paris = ZoneId.of( "Europe/Paris" ); // Or "Asia/Kolkata", etc.
ZonedDateTime zdt_Paris = zdt_Montreal.withZoneSameInstant( zoneId_Paris );

Если вы хотите вернуться к UTC , попросите Instant.

Instant instant = zdt_Paris.toInstant(); 
2 голосов
/ 28 марта 2016
TimeZone fromTimezone =TimeZone.getTimeZone(from);
TimeZone toTimezone=TimeZone.getTimeZone(to);

long fromOffset = fromTimezone.getOffset(calendar.getTimeInMillis());
long toOffset = toTimezone.getOffset(calendar.getTimeInMillis());

long convertedTime = calendar.getTimeInMillis() - (fromOffset - toOffset);
0 голосов
/ 08 июня 2016

Код для получения берлинского времени и преобразования его в UTC Время

Calendar sc = Calendar.getInstance(TimeZone.getTimeZone("Europe/Berlin"));
            String strt = null;
            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");    
            sf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));    
            sc.set(sc.get(Calendar.YEAR),sc.get(Calendar.MONTH),  sc.get(Calendar.DATE),sc.get(Calendar.HOUR) , sc.get(Calendar.MINUTE));
            strt = sf.format(sc.getTime());
            System.out.println("Start :"+strt);
0 голосов
/ 26 февраля 2016
//Convert date from one zone to another
/* 
$zone_from='Asia/Kolkata';

$zone_to='America/Phoenix';

date_default_timezone_set($zone_from);

$convert_date="2016-02-26 10:35:00";

echo $finalDate=zone_conversion_date($convert_date, $zone_from, $zone_to);

*/

function zone_conversion_date($time, $cur_zone, $req_zone)
{   
    date_default_timezone_set("GMT");
    $gmt = date("Y-m-d H:i:s");

    date_default_timezone_set($cur_zone);
    $local = date("Y-m-d H:i:s");

    date_default_timezone_set($req_zone);
    $required = date("Y-m-d H:i:s");

    /* return $required; */
    $diff1 = (strtotime($gmt) - strtotime($local));
    $diff2 = (strtotime($required) - strtotime($gmt));

    $date = new DateTime($time);
    $date->modify("+$diff1 seconds");
    $date->modify("+$diff2 seconds");

    return $timestamp = $date->format("Y-m-d H:i:s");
}
...