日期和时间格式

时间:2012-03-02 06:27:58

标签: android datetime datetime-format

我正在开展一个项目,我需要根据当前时间更改预订订单的时间。我需要做的是我想获得当前时间并且必须生成一个字符串时间列表并在spinner中填充它们。例如。我的开始和结束时间是上午11点到下午2点,当前时间是下午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获得了这个代码,我可以使用它以hh:mm格式获取当前小时和分钟。如何进一步接近?

4 个答案:

答案 0 :(得分:2)

我为您的问题创建了一个代码逻辑,可能没有完全实现但接近您的问题。 首先我拿了日历实例,然后开始循环检查当前小时是否大于14,即下午2:00然后循环将继续生成时间并且增加30分钟直到它到达下午2: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 :(得分:1)

如果要在应用程序上显示当前时间,请使用数字时钟,它位于托盘 - &gt;时间和日期 - &gt;数字时钟,它是一个文本视图时间不断变化。不需要使用计时器或线程来解决主要问题:为此可以手动使用Timer或Thread.Check Hour and Minute,只需做一件事来提高程序效率。将布尔变量作为标志将值设置为false.at启动程序检查每分钟后的小时和分钟。获取第一个后,将该标志设置为True,然后将该线程或计时器休眠到30分钟。您将获得更好的结果。

答案 2 :(得分:1)

试试这段代码:

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);
    }

答案 3 :(得分:0)

为什么不使用SimpleDateFormat?

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