首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >另一个dateTime问题

另一个dateTime问题
EN

Stack Overflow用户
提问于 2010-03-03 09:56:40
回答 6查看 4K关注 0票数 2

我现在有一个这种格式的约会

代码语言:javascript
复制
2010-03-03 10:39:18

这是一个TIMESTAMP字段,在MySQL中。我需要为一个名为Solr的搜索引擎提供这种格式的日期:

代码语言:javascript
复制
1995-12-31T23:59:59Z

以下是他们网站上关于日期的一些文本:

Solr期望索引时日期为UTC。此日期字段的格式为1995-12-31T23:59:59Z,是dateTime http://www.w3.org/TR/xmlschema-2/#dateTime规范表示的一种更受限制的形式。尾随的"Z“指定UTC的时间,并且是强制性的。允许可选分数秒: 1995-12-31T23:59:59.999Z所有其他组件都是强制性的。

我是从另一个Q中得到这段代码的,但是它不起作用。Solr抱怨“无效的时间字符串”:

代码语言:javascript
复制
$solr_date = date('c', (strtotime($date_from_mysql)); // doesn't work

当回显$solr_date,时,上面提到的尾随Z并不存在。谢谢。

EN

回答 6

Stack Overflow用户

发布于 2010-03-05 14:05:26

你为什么不把它转换成世界协调时呢?

代码语言:javascript
复制
    $datetime = "2010-01-19 00:00:00";
    echo "Datetime Before: ".$datetime."<br />";
    $dttostr = strtotime("2010-01-19 00:00:00");
    echo "Datetime After: ".formatToUTC($dttostr)."<br />";
    echo "System Timezone: ".date_default_timezone_get()."<br />";

    function formatToUTC($passeddt) {
        // Get the default timezone
        $default_tz = date_default_timezone_get();

        // Set timezone to UTC
        date_default_timezone_set("UTC");

        // convert datetime into UTC
        $utc_format = date("Y-m-d\TG:i:s\Z", $passeddt);

        // Might not need to set back to the default but did just in case
        date_default_timezone_set($default_tz);

        return $utc_format;
    }
票数 5
EN

Stack Overflow用户

发布于 2010-03-03 10:48:11

首先,值得注意的是,MySQL中的日期/时间列没有以任何特定的字符串格式存储。它们在打印时被转换成字符串,您可以选择如何格式化它们。

如果您想要一个纯MySQL解决方案,那么与您的问题相关的函数包括获得UTC时间的Z()和根据需要显示它的格式()。例如:

代码语言:javascript
复制
SELECT CURRENT_TIMESTAMP,
    CONVERT_TZ(CURRENT_TIMESTAMP, '+01:00', '+00:00'),
    DATE_FORMAT(CONVERT_TZ(CURRENT_TIMESTAMP, '+01:00', '+00:00'), '%Y-%m-%dT%H:%i:%sZ')

问题基本上是,您必须事先知道您的时区,因为时间戳列不允许存储此类信息。此外,您可能会发现夏令时的问题。

关于PHP,日期()函数允许组合格式代码,而不仅仅限于一个:

代码语言:javascript
复制
<?php
$ts = strtotime($date_from_mysql);
$solr_date date('Y-m-d', $ts) . 'T' . date('H:i:s', $ts) . 'Z';
?>
票数 2
EN

Stack Overflow用户

发布于 2013-04-16 03:48:52

只管用

gmdate('Y-m-d\TH:i:s\Z', $time);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2370171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档