преобразовать строку в дату, но вместо этого я получаю сегодня

Я хочу преобразовать данную строку из 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;



    }

person Mahdi    schedule 14.06.2014    source источник
comment
Пожалуйста, покажите примерную дату, которую вы получаете, это было бы неплохо, и нам было бы легче смотреть на ваш код   -  person Illegal Argument    schedule 14.06.2014
comment
что делает Log.i(TIME, convertDate+); напечатано печатает?   -  person Rod_Algonquin    schedule 14.06.2014
comment
используйте гггг-ММ-дд ЧЧ:мм:сс вместо гггг-ММ-ддЧЧ:мм:сс   -  person cracker    schedule 14.06.2014
comment
я отредактирую вопрос, чтобы ответить вам всем. Благодарность   -  person Mahdi    schedule 14.06.2014
comment
@Rod_Algonquin Я просто хочу посмотреть, конвертировалось ли мое свидание или нет. и да, это не конвертирует, и этот lig всегда показывает день.   -  person Mahdi    schedule 14.06.2014
comment
@Kenji что делает Log.i(ВРЕМЯ, дата); Распечатать?? сегодня или указанная дата?   -  person Rod_Algonquin    schedule 14.06.2014
comment
@Rod_Algonquin Я хочу проверить, верна ли моя дата из JSon или нет. как вы знаете, это String как начало и yess. верно   -  person Mahdi    schedule 14.06.2014
comment
@Kenji опубликуйте пример результата, я только что попробовал ваш метод, и он сработал на моем   -  person Rod_Algonquin    schedule 14.06.2014
comment
Вы говорите, что можете получить миллисекунды между сегодняшним днем ​​и конкретной датой?   -  person Mahdi    schedule 14.06.2014
comment
@Rod_Algonquin кажется, что в моей входной строке было дополнительное пространство, и когда я его удалил, проблема была решена. но мои сегодняшние мельницы больше, чем более поздние. Почему?!   -  person Mahdi    schedule 14.06.2014
comment
потому что сегодняшняя дата больше, чем более поздняя дата.   -  person Rod_Algonquin    schedule 14.06.2014
comment
@Rod_Algonquin что?! 2014-5-14(сегодня) лучше, чем 2014-5-21?!   -  person Mahdi    schedule 14.06.2014
comment
@Kenji добавил это к ответу   -  person Rod_Algonquin    schedule 14.06.2014


Ответы (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
person Rod_Algonquin    schedule 14.06.2014
comment
так почему мои оставшиеся день, час и мин неверны. например, сегодня 2014-5-14, а дата игры 2014-5-16. и, наконец, мой результат возврата: 148-3546-0 - person Mahdi; 14.06.2014
comment
@Kenji, твой расчет дня и минуты неверен, см. Мое редактирование - person Rod_Algonquin; 14.06.2014
comment
спасибо но это не правильно. Я хочу получить оставшееся время в днях, часах и минутах, а не в днях, часах или минутах. - person Mahdi; 14.06.2014
comment
@Kenji вот как получить оставшееся время в днях и т. д. посмотри мой результат - person Rod_Algonquin; 14.06.2014
comment
Вы говорите, что у нас есть 29 дней до 2014-5-16?! это через два дня, братан!! нет, ты должен вычесть дни, а затем рассчитать часы. затем вычтите часы и рассчитайте минуты. - person Mahdi; 14.06.2014
comment
@Кендзи, каков твой ожидаемый результат? , потому что сегодня 06, а не 05 - person Rod_Algonquin; 14.06.2014
comment
Результат @Kenji (2,48,2939), и я использовал getGameRemainedTime(2014-6-16 12:00:00); - person Rod_Algonquin; 14.06.2014
comment
@Kenji вычисляет день и т. д. - person Rod_Algonquin; 14.06.2014

Ваш SimpleDateFormat имеет формат, отличный от формата строки, которую вы пытаетесь проанализировать (в нем отсутствует пробел ' ' после dd. Я предполагаю, что dateFormat.parse() вызовет исключение, поэтому ваш convertDate сохранит значение, назначенное с помощью new Date() , что является датой сейчас.

person Tobias    schedule 14.06.2014
comment
это отсутствующее пространство было просто моими многочисленными строками многих типов. Я запускаю код в первый раз так же, как: гггг-ММ-дд ЧЧ: мм: сс - person Mahdi; 14.06.2014

Формат в вашем коде отличается от формата, который вы хотите:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); 

и вы хотите это:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
person amatellanes    schedule 14.06.2014
comment
правильный ли мой алгоритм расчета оставшегося времени? - person Mahdi; 14.06.2014