在Android中通过utc / gmt获取日期

时间:2014-03-10 10:11:36

标签: java android timezone

我想在某个国家/地区显示时间,TimeZone是GMT + 4。

private void loadWeather(){
    TimeZone tz = TimeZone.getTimeZone("GMT+0400");
    Calendar cal = Calendar.getInstance(tz);
    Date date = cal.getTime();
    DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT, Locale.getDefault());
    String myDate = df.format(date);
    tv_time.setText(myDate);
}

我试过这个,但它给了我时间,而不是另一个

2 个答案:

答案 0 :(得分:3)

问题在于,您只是在Calendar上指定时区 - 仅 用于获取当前时刻,这不取决于时间区。您需要在格式上指定它,以便在创建该瞬间的适当文本表示时应用它:

private void loadWeather() {
    Date date = new Date(); // This is enough; it uses the current instant.
    DateFormat df = DateFormat.getDateTimeInstance(
        DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault());
    df.setTimeZone(TimeZone.getTimeZone("GMT+0400"));
    String myDate = df.format(date);
    tv_time.setText(myDate);
}

或者更内联:

private void loadWeather() {
    DateFormat df = DateFormat.getDateTimeInstance(
        DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault());
    df.setTimeZone(TimeZone.getTimeZone("GMT+0400"));
    tv_time.setText(df.format(new Date()));
}

(假设您确实需要使用当前区域设置的短日期/时间格式。)

答案 1 :(得分:0)

如下所示使用SimpleDateFormat并将TimeZone设置为SimpleDateFormat对象...我认为,您将解决问题。

    Calendar calendar = Calendar.getInstance();

    SimpleDateFormat dateFormatGmt = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss");
    dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT+0400"));

    String date = dateFormatGmt.format(calendar.getTime());