Конвертировать строку в дату, но я получаю сегодня вместо
Я хочу преобразовать данную строку из JSON в формате "ГГГГ-ММ-ДД ЧЧ: ММ: СС" в дату, чтобы я мог преобразовать ее в календарь и, наконец, получить мельницы с этой конкретной даты и дня. но я просто получаю сегодня вместо данной даты
public static String getGameRemainedTime(String date){
Log.i("TIME", date);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date convertedDate = new Date();
try {
convertedDate = dateFormat.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("TIME", convertedDate+"");
Calendar game_date = Calendar.getInstance();
game_date.setTime(convertedDate);
Calendar today = Calendar.getInstance();
long gamedate_stamp = game_date.getTimeInMillis();
long today_stamp = today.getTimeInMillis();
Log.i("TIME", today_stamp+"-"+gamedate_stamp);
long diff = gamedate_stamp - today_stamp;
long day = diff / (1000 * 24 * 60 * 60 );
long hour = (diff -(1000 * 24 * 60 * 60 )) / (1000 * 60 * 60 );
long mins = ((diff -(1000 * 24 * 60 * 60 )) / (1000 * 60 * 60 )) / (1000 * 60 );
Log.i("TIME", day+"-"+hour+"-"+mins);
return day+"-"+hour+"-"+mins;
}
3 ответа
Вы должны вычесть today_date
от твоего specified date
вот почему вы получаете неправильные результаты.
попробуйте изменить это:
long diff = gamedate_stamp - today_stamp;
к:
long diff = today_stamp- gamedate_stamp ;
редактировать:
public static String getGameRemainedTime(String date) throws java.text.ParseException{
Log.i("TIME", date);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date convertedDate = new Date();
try {
convertedDate = dateFormat.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("TIME", convertedDate+"");
Calendar game_date = Calendar.getInstance();
game_date.setTime(convertedDate);
Calendar today = Calendar.getInstance();
long gamedate_stamp = game_date.getTimeInMillis();
long today_stamp = today.getTimeInMillis();
Log.i("TIME", today_stamp+"-"+gamedate_stamp);
long diff = today_stamp - gamedate_stamp;
long day = diff / (24 * 60 * 60 * 1000);
long hour = diff / (60 * 60 * 1000);
long mins = diff / (60 * 1000);;
Log.i("DAY: ", " " + day);
Log.i("HOUR: ", " " + hour);
Log.i("MINUTES", " " + mins);
return day+"-"+hour+"-"+mins;
}
попробуйте это в вашем oncreate();
getGameRemainedTime("2014-5-16 10:34:22");
результат:
06-14 10:37:11.891: I/DAY:(1270): 29
06-14 10:37:11.891: I/HOUR:(1270): 696
06-14 10:37:11.891: I/MINUTES(1270): 41762
Ваш SimpleDateFormat имеет формат, отличный от строки, которую вы пытаетесь проанализировать (ему не хватает пробела '' после dd. Я предполагаю, что dateFormat.parse() сгенерирует исключение, поэтому ваш convertDate сохранит значение, назначенное с помощью new Date()
, которая сейчас является датой.
Формат в вашем коде отличается от формата, который вы хотите:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
и вы хотите это:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");