java中关于时间的格式化

long time = System.currentTimeMillis();
        SimpleDateFormat format = new SimpleDateFormat();
        String s = format.format(time);
        System.out.println(s);

这是最简单地格式化方法,打印出来的,

16-1-3 下午4:38

而这是我系统的时间。

当我把系统时间换了,系统打印出来的时间也换了,

16-1-3 下午4:35

至于这么显示,有太多的方法去格式化了。

java api给我们提供了这么一个实现类SimpleDateFormat,上面有一个DateFormat抽象类也可以想些办法的。

 

另外关于时间计算的类,在spring-framework里面提供了stopwatch类,相当于一个秒表的类,比较方便。

还有一个关于时间调度的框架Quartz,比较复杂,一般在javaweb开发中用到。

 

Timer 类,这个是java.util包下面,用于时间任务的一个类,相比线程池,这个只有一个线程,而且进行了同步锁,所以是线程安全的。

不用自己进行同步管理。

需要注意的是,在构造函数中,可能有一个boolean的值得填写,这个是关于守护线程的,守护线程通俗意义上讲,在android应用中,如果这个Activity的生命周期结束了,上下文没有了,那么这个守护线程也不存在了。如果没有填写,那么是正常的线程。

另外有几个延迟和定时的方法。

需要注意,当调用

Timer timer = new Timer();
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.MINUTE, 5);
        
        System.out.println(new Date());
        timer.scheduleAtFixedRate(new TimerTask() {
            
            @Override
            public void run() {
                System.out.println(new Date()+"one");
            }
        },cal.getTime() , 5000);
        
        
        timer.schedule(new TimerTask() {
            
            @Override
            public void run() {
                System.out.println(new Date()+"two");
            }
        }, cal.getTime(), 5000);

目前系统时间为10分,所以设置的时间比系统的时间要早5分钟,

执行的结果是,

Tue Jan 05 23:10:06 CST 2016
Tue Jan 05 23:10:06 CST 2016one
Tue Jan 05 23:10:06 CST 2016two
Tue Jan 05 23:10:06 CST 2016one
Tue Jan 05 23:10:06 CST 2016one
Tue Jan 05 23:10:06 CST 2016one
Tue Jan 05 23:10:06 CST 2016one
Tue Jan 05 23:10:06 CST 2016one
Tue Jan 05 23:10:06 CST 2016one

可以看到为了保证fixrate,会执行多次,来保证这个rate,所以请注意。而另一个方法只是仍然马上等5秒执行。

 

终止的话,可以调用cancel方法,或者调用System.exit方法

考虑效率,有时候需要加上system.gc()来主动调用垃圾回收方法。

 

posted @ 2016-01-03 16:51  likeshu  阅读(476)  评论(0编辑  收藏  举报