Конвертировать UTC Время T0 Местное время в Java или Groovy - PullRequest
5 голосов
/ 11 апреля 2011

Мне нужно хранить созданный (один из атрибутов в доменном классе). Я получаю системное время и сохраняю значение для этого атрибута. Мой часовой пояс (GMT + 5: 30 Ченнаи, Калькутта, Мумбаи, Нью-Дели), когда я загружаю на сервер, он хранит время UTC. Я хочу, чтобы это было IST (индийское стандартное время). В моем приложении используется Groovy на Grails. Пожалуйста, помогите мне отрегулировать разницу во времени UTC / IST. Заранее спасибо

Ответы [ 2 ]

23 голосов
/ 11 апреля 2011

Нет, не делай этого.Когда-либо!

Если вы храните раза в локальной форме, вас ждет мир боли.В основном вам нужно хранить как местное время, так и местный часовой пояс, и отображение времени становится комплексным зверем (при обработке исходного и целевого часовых поясов).

Время должно быть сохранено как UTC.Не исключениеВремя, введенное пользователем, должно быть преобразовано в UTC, прежде чем оно будет записано в любом месте (как можно скорее).

Время, которое будет показано пользователю, должно быть преобразовано из UTC в локальное как можно позднее.

Возьмите этот совет от кого-то, кто когда-то увяз в болоте с несколькими часовыми поясами.Использование UTC и преобразование только тогда, когда это необходимо, сделает вашу жизнь намного проще.


Если у вас есть время в формате UTC, вам нужно использовать класс SimpleDateFormat для его преобразования:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class scratch {
    public static void main (String args[]) {
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone (TimeZone.getTimeZone ("IST"));
        System.out.println ("Time in IST is " + sdf.format (now));
    }
}

Это выводит:

Time in IST is 2011-04-11 13:40:04

, который совпадает с текущим временем в Mirzapur , который, я думаю, является тем, где базируется IST (не то, что это имеет значение в Индии в настоящее время, так какон имеет только один часовой пояс).

3 голосов
/ 11 апреля 2011
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sf.setTimeZone(TimeZone.getTimeZone("GMT"));
        System.out.println(sf.format(new Date()));


        SimpleDateFormat sf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sf1.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
        System.out.println(sf1.format(new Date()));
        System.out.println(Arrays.asList(TimeZone.getDefault()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...