I found the question about converting epoch time to normal time, but I’m having two problems:
- When I run DateTime.newInstance(1391529600 * 1000) I am getting the wrong answer
- I want to convert normal time to epoch time
1: I have been typing the following into Execute Anonymous:
system.debug(DateTime.newInstance(1391529600 * 1000));
By my calculations (and some websites I found) that should give me 4 Feb, 2014, 16:00:00 GMT.
Apex gives me
1969-12-31 12:56:36
Clearly, this is incorrect (and it’s even before 1/1/1970). Can anyone replicate my situation?
2: I also want to change the current datetime (GMT) to epoch time, returning the number of seconds or milliseconds since 1/1/1970. I could break things into parts, but that seems an awful lot of script statements to do something that should be fairly easy, I’d hope.
Thanks for the help!
Answer
I can replicate it, and by removing the * 1000
and appending 3 zeros, I got “Invalid Integer”. So what I believe is that 1391529600 * 1000
is being evaluated as an integer type and so overflowing.
You can create the Long value using the L
notation like so:
system.debug(DateTime.newInstance(1391529600000L));
To get the epoch from a datetime
variable you can just call the getTime()
instance method:
Datetime dt = Datetime.now();
Long l = dt.getTime();
system.debug(l);
system.debug(DateTime.newInstance(l));
produces:
USER_DEBUG|[7]|DEBUG|1391560453900
USER_DEBUG|[9]|DEBUG|2014-02-05 00:34:13
Attribution
Source : Link , Question Author : DavidSchach , Answer Author : Community