Android将中央时间转换为本地时间

时间:2010-03-09 09:00:47

标签: java android timezone timestamp

我有一个MySql数据库,它存储我插入的每个记录的时间戳。我将该时间戳作为字符串添加到我的Android应用程序中。我的数据库位于具有CST TimeZone的服务器上。我想将该CST时间戳转换为Android设备的本地时间。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:7)

根据Android documentation.

结合使用getTimeZone.getDefault
  

public static synchronized TimeZone   getDefault()

     

获取默认时区。返回   默认时区。

因为你知道CST是格林威治标准时间-6:00,并且你得到一个当地时区,说用户是+9:00(日本),你知道将你的MySQL数据库时间调整+15小时( 9 - ( - 6))。或者如果他们在迈阿密(EST,-5),你可以通过增加一小时(-5 - ( - 6))进行调整。如果在俄勒冈州波特兰市(PST -8),您将减去2小时(-8 - ( - 6))。

所以你真的需要获得当地时区偏移量并将其输入基本公式:TimeZone.getDefault + 6,你就会知道要向本地数据库添加或减去什么。 (+6因为 - ( - 6)总是达到+6)。

如果我知道编写Java的第一件事,我会采取额外的步骤并编写一些示例代码,但是,我只对脚本足够聪明。

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中如何做到这一点?

答案 1 :(得分:3)

假设您在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 :(得分:2)

你不能简单地用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;
}

有意义吗?

答案 3 :(得分:2)

这是一个老问题,但我想写下我的答案。假设您从SQL获得的时间戳类似于以下格式:yyyy-MM-dd'T'HH:mm:ss

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);
}