2021-02-05

本文介绍了如何在Android应用中通过系统广播ACTION_TIME_TICK实时刷新时间,以及如何使用SimpleDateFormat处理日期格式。包括了newDate(), toLocaleString()方法,以及动态注册广播接收器来监听系统时间变化。
摘要由CSDN通过智能技术生成

使用date获取系统时间:
复制代码
private SimpleDateFormat simpleDateFormat;
private Date date;

//onCreate中
    simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd  HH:mm");
    date = new Date(System.currentTimeMillis());//获取系统时间
    currentTimeText.setValue(simpleDateFormat.format(date));

复制代码
Date方法比较简单,只需要一条语句:Date().toLocaleString(),就可以获得整个的时间信息,并且格式规范,不用再组装,可以直接显示。缺点是如果想用另外一种格式显示,或者只需要单个的时间信息,就比较麻烦。可以定义SimpleDateFormat,规定哪些信息显示,哪些信息不显示,如显示年、月、日、小时、分钟、星期几

在开发过程中,通常很多人都习惯使用new Date()来获取当前时间。new Date()所做的事情其实就是调用了System.currentTimeMillis()。如果仅仅是需要获得毫秒数,那么完全可以使用System.currentTimeMillis()去代替new Date(),效率上会高一点。

复制代码

Date date = new Date();
 
String time = date.toLocaleString();
 
Log.i("md", "时间time为: "+time);
 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年-MM月dd日-HH时mm分ss秒 E");
 
String sim = dateFormat.format(date);
 
Log.i("md", "时间sim为: "+sim);

复制代码
01-01 03:31:31.458: I/md(18530): 时间time为: Jan 1, 2015 3:31:31 AM

01-01 03:31:31.459: I/md(18530): 时间sim为: 2015年-01月01日-03时31分31秒 Thu

————————————————
版权声明:本文为CSDN博主「Vindent-C」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41508747/article/details/89511064

实时刷新时间,通过系统广播实现
系统每分钟都会发送广播Intent.ACTION_TIME_TICK

复制代码
//onCreateView中
IntentFilter filter=new IntentFilter();//创建意图过滤器对象
filter.addAction(Intent.ACTION_TIME_TICK);//为接收器指定action,使之用于接收同action的广播
view.getContext().registerReceiver(receiver,filter);//动态注册广播接收器
//view.getContext是一个fragment中的context

private final BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(Intent.ACTION_TIME_TICK)) {
            //TODO更新时间
        }
    }
}; 

复制代码
android.intent.action.TIME_TICK是一个受保护的Intent,只能被系统发出。它不能通过在AndroidManifest.xml文件中注册(静态注册)来接收广播,只能通过Context.registerReceiver()在代码中动态注册。

为提高安卓系统的安全性,从9.0开始,系统全面禁止静态注册的广播,凡是静态广播在9.0系统中都不再有效,因此为了适配Android 9.0,静态注册的广播都 要换成在代码里声明的动态广播

参考:

https://blog.csdn.net/qq_41508747/article/details/89511064 Android开发中获取系统时间的几种种方式 by Vindent-C

https://blog.csdn.net/u011397174/article/details/18354523 android.intent.action.TIME_TICK by arieluc

移动开发丛书·Android Studio开发实战:从零基础到App上线 欧阳燊著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值