Only Some Dates From SQL SELECT Being Set To “0” or “1969-12-31” — UNIX_TIMESTAMP

假装没事ソ 提交于 2019-12-12 02:33:32

问题


So I have been doing pretty well on my project (Link to previous StackOverflow question), and have managed to learn quite a bit, but there is this one problem that has been really dogging me for days and I just can't seem to solve it.

It has to do with using the UNIX_TIMESTAMP call to convert dates in my SQL database to UNIX time-format, but for some reason only one set of dates in my table is giving me issues!

==============

So these are the values I am getting -

#abridged here, see the results from the SELECT statement below to see the rest
#of the fields outputted

| firstVst   | nextVst    | DOB       |
| 1206936000 | 1396238400 |         0 |
| 1313726400 | 1313726400 | 278395200 |
| 1318910400 | 1413604800 |         0 |
| 1319083200 | 1413777600 |         0 |

when I use this SELECT statment -

SELECT SQL_CALC_FOUND_ROWS *,UNIX_TIMESTAMP(firstVst) AS firstVst,
UNIX_TIMESTAMP(nextVst) AS nextVst, UNIX_TIMESTAMP(DOB) AS DOB FROM people 
ORDER BY "ref DESC";

So my big question is: why in the heck are 3 out of 4 of my DOBs being set to date of 0 (IE 12/31/1969 on my PC)? Why is this not happening in my other fields?


I can see the data quite well using a more simple SELECT statement and the DOB field looks fine...?

#formatting broken to change some variable names etc.

select * FROM people;

| ref | lastName | firstName | DOB      | rN   | lN   | firstVst  | disp | repName        | nextVst   |
| 10001 | BlankA   | NameA     | 1968-04-15 | 1000000 | 4600000 | 2008-03-31 | Positive  | Patrick Smith | 2014-03-31 |
| 10002 | BlankB   | NameB     | 1978-10-28 | 1000001 | 4600001 | 2011-08-19 | Positive  | Patrick Smith | 2011-08-19 |
| 10003 | BlankC   | NameC     | 1941-06-08 | 1000002 | 4600002 | 2011-10-18 | Positive  | Patrick Smith | 2014-10-18 |
| 10004 | BlankD   | NameD     | 1952-08-01 | 1000003 | 4600003 | 2011-10-20 | Positive  | Patrick Smith | 2014-10-20 |

回答1:


It's because those DoB's are from before 12/31/1969, and the UNIX epoch starts then, so anything prior to that would be negative.

From Wikipedia:

Unix time, or POSIX time, is a system for describing instants in time, defined as the number of seconds that have elapsed since 00:00:00 Coordinated Universal Time (UTC), Thursday, 1 January 1970, not counting leap seconds.

A bit more elaboration: Basically what you're trying to do isn't possible. Depending on what it's for, there may be a different way you can do this, but using UNIX timestamps probably isn't the best idea for dates like that.



来源:https://stackoverflow.com/questions/17644888/only-some-dates-from-sql-select-being-set-to-0-or-1969-12-31-unix-timesta

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!