The difference is whether it include time values, such as hours, minutes, and seconds.
When you try to convert datetime (or np.datetime64) to int (or np.int64), the value will be epoch time, which is a value of seconds from 1970-01-01 00:00:00 (utc).
(See epoch time calculator: https://www.epochconverter.com/)
However, if you try to convert "2017-09-26" to int, it is hard to calculate how many seconds from 1970-01-01 00:00:00 because the value does not include hour, minutes, seconds information and timezone information.
To make it convertable, you have to add time information, as follows:
a = np.datetime64('2017-09-26T00:00:00.000000000')
print(int(a)) # 1506384000000000000 --> This is an epoch time for 2017-09-26 00:00:00
a = np.datetime64('2017-09-26','us').astype(np.int64) # not int, use np.int64
print(a) # 1506384000000000 -> This is also a epoch time for 2017-09-26 00:00:00
In addition, please use astype(np.int64) instead of astype(int) to convert it to exact epoch time when your value is saved as datetime64. If you use int, this will return the number of days from 1970-01-01.
a = np.datetime64('2017-09-26T15:20:11.546205184').astype(int)
print(a) # 1072585728 -> not an epoch time, but days from 1970-01-01
a = np.datetime64('2017-09-26T15:20:11.546205184').astype(np.int64)
print(a) # 1506439211546205184 -> a correct epoch time of 2017-09-26 15:20:11 with miliseconds
- edited with consideration of @FObersteiner 's comment, Thanks!
int(...)to work. I think this behavior ensures that the conversion to a serial date/time is unambiguous - if the unit of the input datetime is e.g. seconds, the result is seconds since the Unix epoch and so on..astype(np.int64)will work in any case, and return Unix time in the precision you specified. E.g.np.datetime64('2017-09-26T15:20:11.546').astype(np.int64)will give you milliseconds since the epoch etc.