Добрый день, помогите, пожалуйста, разобраться как правильно делать и в чем причина следующей ерунды.
Дано две строки, в одной дата, в другой время.
String data = "050720"; //дата 2005г. 20 июля
String time = "072435"; // время 7:24:35
//Надо разобрать эти две строки и сохранить в БД в одно поле дату и время.
//Делаю так (Всякие try/catch я поубираю, чтобы не отвлекало):
SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
java.util.Date entryDate = sdf.parse(data); // получается дата такая, как надо, время 0ч.0м.0с.
sdf = new SimpleDateFormat("HHmmss");
Date tm = sdf.parse(time); // получается дата 1970г. 1 янв. и время 7:24:35, т.е. все ОК
//теперь я хочу сложить дату и время, чтобы получить то что мне надо:
entryDate = new Date(entryDate.getTime() + tm.getTime() ); //в результате получается время на 2 часа меньше, т.е. меньше на мой часовой пояс (+2)
//причём если сделать так, то все ОК
Date test = new Date(entryDate.getTime() + tm.getTime() + 7200000);
String data = "050720"; //дата 2005г. 20 июля
String time = "072435"; // время 7:24:35
SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
Date entryDate = sdf.parse(data); // получается дата такая, как надо, время 0ч.0м.0с.
sdf = new SimpleDateFormat("HHmmss");
Date tm = sdf.parse(time); // получается дата 1970г. 1 янв. и время 7:24:35, т.е. все ОК
//теперь я хочу сложить дату и время, чтобы получить то что мне надо:
Calendar date = Calendar.getInstance();
date.setTime(entryDate);
Calendar tc = Calendar.getInstance();
tc.setTime(tm);
date.set(Calendar.HOUR_OF_DAY, tc.get(Calendar.HOUR_OF_DAY));
date.set(Calendar.MINUTE, tc.get(Calendar.MINUTE));
date.set(Calendar.SECOND, tc.get(Calendar.SECOND));
date.set(Calendar.MILLISECOND, 0);
System.out.println("old: " + new Date(entryDate.getTime() + tm.getTime() ));
System.out.println("date = " + date.getTime());
Здравствуйте, Infernal, Вы писали:
vsi>>HELP!
I>Используй java.util.Calendar
Стасибо, я так попробую, а интересно почему не работает так как делал я?
П.С. кстати, если дату и время объединить в одну строку и сделать так как я делал, только за один приём с форматом "yyMMddHHmmss", то всё нормально получается тоже.
vsi>Стасибо, я так попробую, а интересно почему не работает так как делал я?
покопай что делает SimpleDateFormat
в сторону Locale и Calendar используемых в нем.
vsi>П.С. кстати, если дату и время объединить в одну строку и сделать так как я делал, только за один приём с форматом "yyMMddHHmmss", то всё нормально получается тоже.
Здравствуйте, vsi, Вы писали:
vsi>SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
попробуй поставить sdf.setTimeZone(TimeZone.getTimeZone("GMT"))
или используй для сложения дат Calendar
Здравствуйте, vsi, Вы писали:
vsi>П.С. кстати, если дату и время объединить в одну строку и сделать так как я делал, только за один приём с форматом "yyMMddHHmmss", то всё нормально получается тоже.
это лучший вариант
Здравствуйте, tavr, Вы писали:
T>Здравствуйте, vsi, Вы писали:
vsi>>П.С. кстати, если дату и время объединить в одну строку и сделать так как я делал, только за один приём с форматом "yyMMddHHmmss", то всё нормально получается тоже. T>это лучший вариант
Да, походу лучший, я сразу его не использовал, поскольку там бывает 2 варианта, когда время есть и когда нету, но все же проще проверку поставить, чем с зонами и календарями заморачиваться.