【问题标题】:Js Date object to python datetimeJs Date对象到python datetime
【发布时间】:2011-12-30 12:25:26
【问题描述】:

我正在使用 dhtmlxscheduler 并将日期发送到 django 服务器进行处理。

Dhtmlxscheduler 为我提供了以下日期对象,提供的方法从下面的第二行开始:

end_date: Sat Nov 19 2011 01:00:00 GMT-0500 (EST)
__proto__: Invalid Date
constructor: function Date() { [native code] }
getDate: function getDate() { [native code] }
getDay: function getDay() { [native code] }
getFullYear: function getFullYear() { [native code] }
getHours: function getHours() { [native code] }
getMilliseconds: function getMilliseconds() { [native code] }
getMinutes: function getMinutes() { [native code] }
getMonth: function getMonth() { [native code] }
getSeconds: function getSeconds() { [native code] }
getTime: function getTime() { [native code] }
getTimezoneOffset: function getTimezoneOffset() { [native code] }
getUTCDate: function getUTCDate() { [native code] }
getUTCDay: function getUTCDay() { [native code] }
getUTCFullYear: function getUTCFullYear() { [native code] }
getUTCHours: function getUTCHours() { [native code] }
getUTCMilliseconds: function getUTCMilliseconds() { [native code] }
getUTCMinutes: function getUTCMinutes() { [native code] }
getUTCMonth: function getUTCMonth() { [native code] }
getUTCSeconds: function getUTCSeconds() { [native code] }
getYear: function getYear() { [native code] }
setDate: function setDate() { [native code] }
setFullYear: function setFullYear() { [native code] }
setHours: function setHours() { [native code] }
setMilliseconds: function setMilliseconds() { [native code] }
setMinutes: function setMinutes() { [native code] }
setMonth: function setMonth() { [native code] }
setSeconds: function setSeconds() { [native code] }
setTime: function setTime() { [native code] }
setUTCDate: function setUTCDate() { [native code] }
setUTCFullYear: function setUTCFullYear() { [native code] }
setUTCHours: function setUTCHours() { [native code] }
setUTCMilliseconds: function setUTCMilliseconds() { [native code] }
setUTCMinutes: function setUTCMinutes() { [native code] }
setUTCMonth: function setUTCMonth() { [native code] }
setUTCSeconds: function setUTCSeconds() { [native code] }
setYear: function setYear() { [native code] }
toDateString: function toDateString() { [native code] }
toGMTString: function toGMTString() { [native code] }
toISOString: function toISOString() { [native code] }
toJSON: function toJSON() { [native code] }
toLocaleDateString: function toLocaleDateString() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toLocaleTimeString: function toLocaleTimeString() { [native code] }
toString: function toString() { [native code] }
toTimeString: function toTimeString() { [native code] }
toUTCString: function toUTCString() { [native code] }
valueOf: function valueOf() { [native code] }
__proto__: Object

选择这些 toString 方法之一,然后在 python 服务器端使用 datetime.strptime() 解析它以创建 python 日期时间对象的最简单方法是什么?

简单的 toString 方法返回一个日期时间,格式如下:

Sat Nov 19 2011 00:00:00 GMT-0500 (EST)

尝试不同的格式指令被证明是不成功的。

即:

datetime.strptime("Sat Nov 19 2011 00:00:00 GMT-0500 (EST)", "%a %b %d %Y %H:%M:%S %Z") 
---> unconverted data remains: -0500 (EST)

和:

datetime.strptime("Sat Nov 19 2011 00:00:00 GMT-0500 (EST)", "%a %b %d %Y %H:%M:%S %z") 
---> ValueError: 'z' is a bad directive in format '%a %b %d %Y %H:%M:%S %z'

【问题讨论】:

    标签: javascript python parsing datetime date


    【解决方案1】:

    toUTCString() 给出:

    "Tue, 22 Nov 2011 06:00:00 GMT"
    

    这可以解释为:

    datetime.strptime("Tue, 22 Nov 2011 06:00:00 GMT", "%a, %d %b %Y %H:%M:%S %Z")
    

    【讨论】:

    • 如果您希望输入中的“GMT”知道日期时间,那么datetime.strptime("Tue, 22 Nov 2011 06:00:00 GMT".replace("GMT", "+00:00"), "%a, %d %b %Y %H:%M:%S %z") 就可以了
    【解决方案2】:

    看起来你得到了一个普通的 javascript Date 对象。在这种情况下,最简单的方法可能是使用getTime 方法来获取时间戳。它应该返回类似1321463229215 的东西,它只是一个以毫秒为单位的时间戳。

    datetime 的 fromtimestamp 需要以秒为单位的时间戳,因此只需将该时间戳除以 1000.0 即可

    from datetime import datetime
    datetime.fromtimestamp(1321463229215 / 1000.0)
    

    【讨论】:

    • 不幸的是,该方法在秒后返回毫秒单位。即:小时:分钟:秒:毫秒。
    • 对 NT3RP 的帖子添加了一个编辑,将 getUTCMilliseconds 更改为 getTime 并将时间戳除以 1000.0,因为 fromtimestamp 期望时间戳以秒为单位,而不是毫秒。
    • 非常感谢@NT3RP!
    【解决方案3】:

    尝试使用 python-dateutilpip install python-dateutil

    import dateutil.parser as dt
    date_time_obj = dt.parse("Tue, 22 Nov 2011 06:00:00 GMT")
    

    date_time_obj 将是一个日期时间对象

    【讨论】:

    • 这无疑是最简单的选择,但我认为它比其他的要慢得多。
    猜你喜欢
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 2011-10-19
    • 2015-10-03
    • 1970-01-01
    • 2015-12-02
    • 2014-08-12
    • 1970-01-01
    相关资源
    最近更新 更多