This:
long startTimeMilliseconds = [startDate timeIntervalSince1970] * 1000;
Should Be:
double startTimeMilliseconds = [startDate timeIntervalSince1970] * 1000;
Here's why,
The maximum long can be found with LONG_MAX
and it will log:
2147483647
Your current time interval is:
1395243960000.000000
Long can't go big enough.