Форматирование даты и времени - PullRequest
0 голосов
/ 02 марта 2012

Я работаю над проектом, в котором мне нужно изменить время заказа на заказ на основе текущего времени.Что мне нужно сделать, так это то, что я хочу получить текущее время и должен сгенерировать строковый список времени и заполнить их счетчиком.например.Мое время начала и окончания - с 11:00 до 14:00, а текущее время - с 12:30.Поэтому мне нужно взять текущее время и сгенерировать представление списка времен 30-минутного перерыва до времени окончания.Так что это будет 1: 00,1: 30,2: 00.

public void doWork() {
runOnUiThread(new Runnable() {
    public void run() {
        try{
            TextView txtCurrentTime= (TextView)findViewById(R.id.lbltime);
                Date dt = new Date();
                int hours = dt.getHours();
                int minutes = dt.getMinutes();
                int seconds = dt.getSeconds();
                String curTime = hours + ":"+minute + ":"+ seconds;
                txtCurrentTime.setText(curTime);
        }catch (Exception e) {}
    }
});
}

class CountDownRunner implements Runnable{
// @Override
public void run() {
        while(!Thread.currentThread().isInterrupted()){
            try {
            doWork();
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
            }catch(Exception e){
            }
        }
 }
}

Я получил этот код от So, который я могу использовать, чтобы получить текущие часы и минуты в формате чч: мм.Как подойти дальше?

Ответы [ 4 ]

2 голосов
/ 02 марта 2012

Я создал кодовую логику для вашей проблемы, возможно, она не полностью реализована, но близка к вашей проблеме.сначала я взял экземпляр календаря, а затем запустил цикл, чтобы проверить, больше ли текущий час, чем 14, то есть 14:00, затем цикл продолжит генерировать время и будет увеличиваться на 30 минут, пока не достигнет 14:00.

 Calendar c1 =Calendar.getInstance();
        String time=""+c1.getTime();
        System.out.println("time="+time);
        System.out.println("hr="+Calendar.HOUR_OF_DAY+"min="+Calendar.MINUTE+"sec="+Calendar.SECOND+"am="+Calendar.AM_PM);
        while(c1.get(Calendar.HOUR_OF_DAY)<=14)
        {
            String hr=""+c1.get(Calendar.HOUR);
            String mi=""+c1.get(Calendar.MINUTE);
            String se=""+c1.get(Calendar.SECOND);
            String curTime = hr + ":"+mi + ":"+ se;
            System.out.println("time="+curTime);
            c1.add(Calendar.MINUTE, 30);
        }

    }
1 голос
/ 21 марта 2012

Попробуйте этот код:

List<String>timeslot=new ArrayList<String>();


    String stoptime="04:00 PM";
    String starttime="11:00 AM";
    SimpleDateFormat df1=new SimpleDateFormat("hh:mm a");
    Date d1=null;
    Date d2=null;
    try 
    {
         d1=df1.parse(stoptime);
         d2=df1.parse(starttime);
    } 
    catch (ParseException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Calendar now = Calendar.getInstance();

    SimpleDateFormat df2=new SimpleDateFormat("kk");
    String curtime=df2.format(now.getTime());
    stoptime=df2.format(d1);
    starttime=df2.format(d2);
    tv.setText(df2.format(d1));
    tv2.setText(curtime);
    int t1=Integer.parseInt(stoptime);
    int t2=Integer.parseInt(curtime);
    int t3=Integer.parseInt(starttime);
    if(t2>=t3)
    {

    while(t2<t1)
    {
        SimpleDateFormat df4=new SimpleDateFormat("mm");
        String curmin=df4.format(now.getTime());
        String stopmin=df4.format(d1);
        int t4=Integer.parseInt(curmin);
        if(t4<60)
        {
            int t5=60-t4;
            if(t5>30)
            {
                t5=t5-30;
            }
            now.add(Calendar.MINUTE, t5);
            SimpleDateFormat df3=new SimpleDateFormat("hh:mm aa");
            curtime=df3.format(now.getTime());
            timeslot.add(curtime);

        }
        now.add(Calendar.MINUTE, 30);
        SimpleDateFormat df3=new SimpleDateFormat("hh:mm aa");
        curtime=df3.format(now.getTime());
        timeslot.add(curtime);
        curtime=df2.format(now.getTime());
        t2=Integer.parseInt(curtime);
    }
    tv3.setText(curtime);
    ArrayAdapter<String>aa=new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_spinner_item, timeslot);
    aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    timespin.setAdapter(aa);
    }
1 голос
/ 02 марта 2012

Если вы хотите отобразить текущее время при использовании приложения Цифровые часы , оно находится в Паллет-> Время и дата-> Цифровые часы Это текстовое представление с непрерывно меняющимся временем. Нет необходимостииспользовать таймер или поток для этого. Ответ для основной проблемы: для этого вы можете использовать Timer или Thread.Check Hour and Minute вручную и просто сделать одну вещь, чтобы повысить эффективность вашей программы. Взять логическую переменную в качестве значения флага, установленного в false.atзапуск программы проверяет часы и минуты после каждой минуты. После получения первого установите этот флаг в значение True, а затем переведите нить этого потока или таймера в 30 минут. Вы получите лучший результат.

0 голосов
/ 02 марта 2012

Почему бы не использовать SimpleDateFormat?

 new SimpleDateFormat("HH:mm:ss zzz").format(new Date(c1.getTime()));
...