Необходимо указать часовой пояс. Лучше использовать библиотеку Joda, в гораздо лучше подходит для даты операций:
http://mvnrepository.com/artifact/joda-time/joda-time/2.2
Взгляните на:
http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormatter.html
и указать часовой пояс и локаль.
Вы можете взглянуть на этот похож вопрос: new Date(long) gives different results
Edit:
Я написал модульный тест для вас:
@Test
public void testPattern(){
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd")
.withLocale(Locale.ENGLISH)
.withZone(DateTimeZone.UTC);
long time = formatter.parseDateTime("2013-05-20").getMillis();
assertEquals(1369008000000L, time);
}
Для того, чтобы убедиться, что это правильно, вы можете запускать свои модульные тесты (я использую плагин maven surefire для запуска теста junit), но этот аргумент будет работать на любом jvm:
Сначала попробуйте запустить его на одной зоне, например:
-Duser.timezone="Europe/Amsterdam'
Затем попробуйте запустить его в другой зоне, например:
-Duser.timezone="Pacific/Honolulu'
Тогда ваш блок тест не должен потерпеть неудачу в любом из случаев.
Возможно, это связано с различными часовыми поясами и/или языковыми настройками на двух машинах? – stakx