代码之家  ›  专栏  ›  技术社区  ›  northdig

android将中心时间转换为本地时间

  •  4
  • northdig  · 技术社区  · 15 年前

    我有一个mysql数据库,它为我插入的每条记录存储一个时间戳。我将时间戳作为字符串拉入我的android应用程序。我的数据库位于时区为cst的服务器上。我想把cst时间戳转换成android设备的本地时间。

    有人能帮忙吗?

    4 回复  |  直到 8 年前
        1
  •  2
  •   Sephy    15 年前

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

    有意义吗?

        2
  •  7
  •   Anthony    15 年前

    使用 getTimeZone.getDefault 结合根据 Android documentation.

    公共静态同步时区 获取默认值()

    获取默认时区。退换商品 默认时区。

    因此,既然您知道cst从gmt开始是-6:00,并且您得到一个本地时区,说用户是+9:00(日本),那么您就知道将mysql数据库时间调整为+15小时(9-(-6))。或者如果他们在迈阿密(东部时间,-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中的任何地方接近如何做到这一点?

        3
  •  3
  •   David    13 年前

    假设在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();
    }
    
        4
  •  2
  •   Alexander Melnikov    13 年前

    这是个老问题,但我想写我的答案。假设,从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);
    }