Có một lỗi mà khi sử dụng module ``datetime`` trong python 2, có thể bạn đã mắc phải.
Trả lời câu hỏi sau, không dùng đến code:
In [28]: (datetime.datetime(2014,8,30,16,45,2) - datetime.datetime(2014, 8, 29, 16, 45, 2)).seconds
Trả về kết quả là bao nhiêu?
Nếu câu trả lời là 0, bạn không cần đọc tiếp bài này.
Nếu câu trả lời khác, hãy cùng tìm hiểu tại sao:
Thử vài ví dụ:
In [27]: (datetime.datetime(2014,8,30,15,45,2) - datetime.datetime(2014, 8, 29, 16, 45, 2)).secondsNhư đã thấy, để lấy số seconds của timedelta, phải sử dụng method ``total_seconds()``.
Out[27]: 82800
In [28]: (datetime.datetime(2014,8,30,16,45,2) - datetime.datetime(2014, 8, 29, 16, 45, 2)).seconds
Out[28]: 0
In [29]: (datetime.datetime(2014,8,30,16,45,2) - datetime.datetime(2014, 8, 29, 16, 45, 2)).total_seconds()
Out[29]: 86400.0
Dùng ``.seconds`` chỉ trả về (delta tính bằng seconds) modulo 86400 (chia lấy dư).
Happy debugging!
Hết.
Updated 30/8/2014
Từ code của python2.7
Python-2.7/Modules/datetimemodule.c
....
730 static PyObject *
731 new_delta_ex(int days, int seconds, int microseconds, int normalize,
732 PyTypeObject *type)
733 {
734 PyDateTime_Delta *self;
735
736 if (normalize)
737 normalize_d_s_us(&days, &seconds, µseconds);
738 assert(0 <= seconds && seconds < 24*3600);
No comments:
Post a Comment