【问题标题】:Communication to PHP/MySQL server - Correct timezone与 PHP/MySQL 服务器的通信 - 正确的时区
【发布时间】:2011-12-28 15:45:50
【问题描述】:

我通过 HTTP Post 从 Android 向运行 PHP 和 mysql 的服务器发送数据。 Android 用户通过此基础架构共享消息。

我有以下问题: 我想显示消息的日期和时间。但我不确定如何正确地做到这一点。 如果我通过 PHP (date('Y-m-d H:i:s')) 设置时间/日期,我始终拥有我在 PHP 服务器上配置的时区。但是,从其他时区发布消息的人会看到错误的时间甚至错误的日期。

所以我认为Android App必须将时间+时区发送到服务器。在 Android 中,我可以通过以下方式获取时区:

Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();

所以我可以通过 HTTP nameValuePairs 将日期/时间和时区发送到 PHP 服务器。 但我不确定如何在 PHP 站点上将其正确存储在 mysql DB 中。

【问题讨论】:

    标签: php android mysql timezone


    【解决方案1】:

    将您的日期存储为 GMT,然后在 Android 中进行翻译。

    【讨论】:

    • 你能提示一下如何做到这一点
    • 我认为您的“tz”将具有 GMT 偏移值。只需在您的(android)客户端中调整日期,然后再将其发送到服务器。当您随后读回该值时,请执行相反的操作。
    【解决方案2】:

    在 php 中,您可以使用 gmdate('Y-m-d H:i:s') 在服务器中设置 UTC 时间,然后将其转换回客户端时区,例如

    public static String convertToLocalTime(String UTCtime) {
    
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        df.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date date;
        try {
            date = df.parse(UTCtime);
        } catch (ParseException e) {
            e.printStackTrace();
            return "";
        }
        df = new SimpleDateFormat("d MMM");
        DateFormat timeStringPart = new SimpleDateFormat("h:mma");
        return df.format(date)+", "+timeStringPart.format(date).toLowerCase();
    
    }
    

    【讨论】:

    • 您的解决方案似乎不错。但是您的代码在 Android 上因 classCastException java.util.Date 而崩溃。
    【解决方案3】:

    良好的经验法则是让您的后端以 UTC/GMT 格式存储所有内容(如果您的服务器的时区是 UTC/GMT,MySQL 会自动为您执行此操作。

    然后在您的前端,您可以根据用户的语言环境调整所有时间。

    【讨论】:

    • 你的意思是php服务器设置时间,在android上我将它调整为用户本地时区?
    • 类似的东西,是的。例如,如果您将时间存储为 01:00 UTC,那么您可以将其显示在设备的时区中。所以 GMT-7 是前一天的 14:00,GMT+3 是当天的 04:00。等等。
    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2017-01-07
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多