Android конвертировать центральное время в местное время - PullRequest
4 голосов
/ 09 марта 2010

У меня есть база данных MySql, в которой хранится метка времени для каждой вставляемой записи. Я помещаю эту метку времени в свое приложение для Android в виде строки. Моя база данных находится на сервере, который имеет TimeZone CST. Я хочу преобразовать эту метку времени CST в местное время устройства Android.

Может кто-нибудь помочь с этим?

Ответы [ 4 ]

7 голосов
/ 09 марта 2010

Используйте getTimeZone.getDefault в сочетании с документацией Android.

публичная статическая синхронизация TimeZone getDefault ()

Получает часовой пояс по умолчанию. Возвращает часовой пояс по умолчанию.

Таким образом, поскольку вы знаете, что CST -6: 00 по Гринвичу, и вы получаете местный часовой пояс, в котором говорится, что пользователь равен +9: 00 (Япония), вы бы хотели настроить время работы MySQL DB на +15 часов ( 9 - (-6)). Или, если они находятся в Майами (EST, -5), вы бы скорректировали, добавив один час (-5 - (-6)). Если вы находитесь в Портленде, штат Орегон, (PST-8), вы должны вычесть 2 часа (-8 - (- 6)).

Так что на самом деле вам просто нужно получить смещение местного часового пояса и подать его в основное уравнение: TimeZone.getDefault + 6, и вы будете знать, что добавить или вычесть в свою локальную базу данных. (+6, поскольку - (- 6) всегда получается до +6).

Если бы я знал в первую очередь о написании Java, я бы пошел на дополнительный шаг и написал бы небольшой пример кода, но, увы, я достаточно умен для сценариев.

Грубая попытка на Яве

Я уже сказал, что понятия не имею, как сделать Java или объектно-ориентированное что-нибудь, верно?

Вот грубая попытка просто покопаться в документации Android. Любые тонкости или простые замечания «Даже не близко» приветствуются. Имейте в виду, что я выяснил правильный метод и класс уже из быстрого поиска, и я придумал простое уравнение для преобразования смещения часового пояса для любого места в CST, так что я не тупица, просто кто-то, кто этого не делает знаю, когда оставить достаточно хорошо в одиночестве. В любом случае, грубая попытка:

System now = System.currentTimeMillis (); //Gets current local time in ms
TimeZone local_tz = TimeZone.getDefault();  //Gets current local TZ of phone
tz_offset_gmt = local_tz.getOffset(now)/3600000; // Get Offset in ms, divide by 3600000
tz_offset_cst = tz_offset_gmt + 6;  // add offset to 6 to get current TZ offset to CST.

Где-нибудь близко к тому, как это сделать в Java?

3 голосов
/ 19 августа 2011

Предположим, у вас есть строка даты в CST, проанализируйте ее с помощью часового пояса CST, а затем отформатируйте с часовым поясом по умолчанию на вашем Android.

String s = "2011-01-01 12:00:00";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("CST"));
Date timestamp = null;
try {
    timestamp = df.parse(s);
    df.setTimeZone(TimeZone.getDefault());
    System.out.println(df.format(timestamp));
} catch (ParseException e) {
    e.printStackTrace();
}
2 голосов
/ 15 июня 2011

Это старый вопрос, но я хочу написать свой ответ.Предположим, что временная метка, полученная из SQL, похожа на следующий формат: гггг-ММ-дд'ТХЧ: мм: сс

public static Date convertStringToDate(String strDate) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("CST"));
    return sdf.parse(strDate);
}
2 голосов
/ 09 марта 2010

Вы не можете просто конвертировать дату с помощью simpleDateFormat ? затем вы просто определяете структуру вашей даты поступления (df) и преобразуете ее в желаемую форму (df):

private static DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
private static DateFormat df2 = new SimpleDateFormat("dd/MM/yyyy 'at' HH:mm");

public void setyourDate(String yourDate) {
Date date2;
yourDate = getyourDate() + "" + yourDate;
try {
date2 = df.parse(yourDate);
yourDate = df2.format(date2);

} catch (ParseException e) {
}
this.yourDate = yourDate;
}

имеет ли смысл?

...