# Converting from DateTime to Epoch - and back

I found the question about converting epoch time to normal time, but I'm having two problems:

1. When I run DateTime.newInstance(1391529600 * 1000) I am getting the wrong answer
2. 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!

• As mentioned below, literals have to be "cast" as a Long. The same holds true for variables, ie `system.debug(Int foo = 1391529600; DateTime.newInstance(foo * 1000));` fails whereas `system.debug(Long foo = 1391529600; DateTime.newInstance(foo * 1000));` will work correctly. Sep 12, 2019 at 13:27

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`

LaceySnr has a solid answer to #1, but #2 is still unanswered, so I'll note that the DateTime.getTime() method returns the number of milliseconds since Jan 1, 1970, so you'll need to divide by 1000 to get standard unix time, which is the number of seconds since the epoch.

If you want to work with this number you'll need to ensure you store it in a Long, and not an Integer type.

• You must have been writing that while I was working on my edit ;) Feb 5, 2014 at 0:38
• Very nice. I'll be careful to use a Long and not an Integer as I move back and forth between the two. Thanks. Feb 6, 2014 at 5:01