Timer + TimerTask 实现数字时钟

article/2025/8/30 10:00:13

任务:


自己完成的:

 

遇到的问题:

1.Android Studio 中 calendar设置系统时区无效的问题



14:50它显示为06:50,时间显示错误,这是因为时区不同。

在8.0以后设置时区,有所改动,不能直接设置 比如GMT+8:00这样的时区了,要设置 时区的id。

id要设置为 比如 北京时间 为:Asia/Shanghai 这就是北京时间的时区id

Android Studio 中 calendar设置时区无效的问题,改成下面这种形式便可解决:

//设置系统时区
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));

2.怎么更改数字字体


原:  现在: 


操作:

打开res,新建一个new Resource Directory,更改Resource type为font.然后导入字体进这个文件夹。

 命名这个字体为font,如图。然后在layout文件夹里对所需要改变的文本增加一行代码:

android:fontFamily="@font/font"

总代码:

 TimerDemoActivity01


package com.example.helloandroid2;import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.TextView;import java.util.Calendar;
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;public class TimerDemoActivity01 extends AppCompatActivity {private Timer timer;private TimerTask task;private TextView tv1,tv2,tv3,tv4,tv5;Calendar cal;public void init() {timer = new Timer();String[] weeks = {"周日","周一","周二","周三","周四","周五","周六"};tv1 = (TextView) findViewById(R.id.textView1);tv2 = (TextView) findViewById(R.id.textView2);tv3 = (TextView) findViewById(R.id.textView3);tv4 = (TextView) findViewById(R.id.textView4);tv5 = (TextView) findViewById(R.id.textView5);//设置系统时区TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));task = new TimerTask() {@Overridepublic void run() {runOnUiThread(new Runnable() { //在定时任务线程中再启动一个runOnUiThread 线程去更新UI@Overridepublic void run() {cal = Calendar.getInstance();//能获取当前的时间,一定要换在TimerTask()里面,这样每回才会刷新tv1.setText(String.format("%02d:%02d",cal.get(Calendar.HOUR_OF_DAY),cal.get(Calendar.MINUTE)));tv2.setText(//判断当前时间是上午还是下午----0为上午,1为下午cal.get(Calendar.AM_PM)==0?"AM":"PM");tv3.setText(String.format("%02d",cal.get(Calendar.SECOND)));tv4.setText(//获取对应日期是该周的第几天weeks[cal.get(Calendar.DAY_OF_WEEK) - 1]);tv5.setText(//获取对应日期的月份,月份从0开始,故为cal.get(Calendar.MONTH)+1String.format("%4d/%d/%d",cal.get(Calendar.YEAR),cal.get(Calendar.MONTH)+1,cal.get(Calendar.DATE)));}});//end runOnUiThread}};}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_timer_demo01);init();timer.schedule(task,0,1000);ActionBar actionBar = getSupportActionBar(); //获取ActionBaractionBar.setTitle("TimerDemo01"); //设置标题}
}

layout文件:activity_timer_domo01.xml


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/black"tools:context=".TimerDemoActivity01"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:fontFamily="@font/font"android:text="20:19"android:textColor="@color/white"android:textSize="96sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.352"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.409" /><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="PM"android:textColor="@color/white"android:textSize="24sp"app:layout_constraintBottom_toTopOf="@+id/textView3"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.192"app:layout_constraintStart_toEndOf="@+id/textView1"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.973" /><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:fontFamily="@font/font"android:text="49"android:textColor="@color/white"android:textSize="48sp"app:layout_constraintBaseline_toBaselineOf="@+id/textView1"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.106"app:layout_constraintStart_toEndOf="@+id/textView1" /><TextViewandroid:id="@+id/textView4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="100dp"android:text="周五"android:textColor="@color/white"android:textSize="24sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView1"app:layout_constraintVertical_bias="0.0" /><TextViewandroid:id="@+id/textView5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="2023/3/7"android:textColor="@color/white"android:textSize="24sp"app:layout_constraintBaseline_toBaselineOf="@+id/textView4"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.46"app:layout_constraintStart_toEndOf="@+id/textView4" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_begin="-1dp" /></androidx.constraintlayout.widget.ConstraintLayout>

@感谢大佬指正


http://chatgpt.dhexx.cn/article/dntGBcRe.shtml

相关文章

java定时器-Timer和TimerTask详解

1、例子入手 package pers.growing.test;import java.util.Timer; import java.util.TimerTask;public class Main {/*** 延迟100ms后&#xff0c;间隔1s打印出&#xff1a;hello world** param args* throws InterruptedException*/public static void main(String[] args) t…

定时器Timer与TimerTask的使用

一&#xff1a;简介 在JDK类库中Timer主要负责计划任务的功能&#xff0c;也就是在指定时间执行某一任务&#xff0c;执行时候会在主线程之外起一个单独的线程执行指定的任务。该类主要是设置任务计划&#xff0c;但封装的类是TimerTask类。 TimerTask是一个实现了Runnable接口…

Java的定时器Timer和定时任务TimerTask应用以及原理简析

记录&#xff1a;272 场景&#xff1a;Java JDK自带的定时器Timer和定时任务TimerTask应用以及原理简析。在JDK工具包&#xff1a;java.util中可以找到源码&#xff0c;即java.util.Timer和java.util.TimerTask。TimerTask实现Runnable接口的run方法。Timer的属性TimerThread …

原码、补码、反码的转换

1.原码 &#xff08;1&#xff09;一个正数&#xff0c;他的原码就是它对应的二进制数字。 &#xff08;2&#xff09;一个负数&#xff0c;按照绝对值大小转换成的二进制数&#xff0c;然后最高位补1&#xff0c;就是负数的原码。 2.反码 &#xff08;1&#xff09;正数的反…

原码、补码、反码的关系

一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的&#xff0c;在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如&#xff0c;十进制中的数 3 &…

原码,反码,补码,阶码,移码

本文转载自本站大佬“不去上课”&#xff0c;原文链接https://blog.csdn.net/ruidianbaihuo/article/details/87875178 原码&#xff0c;反码&#xff0c;补码&#xff0c;阶码&#xff0c;移码是什么?有什么区别(讨论机器数的表示) 本文内容参考自王达老师的《深入理解计算机…

原码、反码、补码之间的转换和简单运算

一、正整数的原码、反码、补码完全一样&#xff0c;即符号位固定为0&#xff0c;数值位相同 二、负整数的符号位固定为1&#xff0c;由原码变为补码时&#xff0c;规则如下&#xff1a; 1、原码符号位1不变&#xff0c;整数的每一位二进制数位求反&#xff0c;得到反码 2、反码…

原码,反码,补码的概念

计算机里都是以补码的形式存储数据&#xff0c;电脑只能识别二进制的0和1&#xff0c; 一个字节&#xff08;8位&#xff09;为例 原码 &#xff1a;最高位符号位&#xff0c;0代表正数&#xff0c;1代表负数&#xff0c;非符号位为该数字绝对值的二进制。 反码&#xff1a;正…

C语言——原码, 反码, 补码 详解

目录 一. 机器数和真值 1、机器数 2、真值 二. 原码, 反码, 补码的基础概念和计算方法. 1. 原码 2. 反码 3. 补码 三. 为何要使用原码, 反码和补码 四 原码, 反码, 补码 再深入 同余的概念 负数取模 开始证明 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先…

原码、反码、补码、移码的概念及转换

目录 前言 1.原码 2.反码 3.补码 4.移码 前言 学习完数的小数点表示&#xff0c;下一个需要解决的问题就是数的机器码表示问题。 在计算机中对数据进行运算操作时&#xff0c;符号位应该如何表示&#xff1f;是否也同数值位一道参加运算操作呢&#xff1f;如果参加&…

mt7620芯片处理器核心资料

MT7620产品系统整合了2T2R 802.11n Wi-Fi 收发器、580MHz MIPS 24KEc™ 中央处理器 (CPU)、5 端口高速以太网络端口物理层 (Ethernet PHY)、HNAT、存储器加速器、USB2.0 主机/设备&#xff0c;以及多种慢速输入输出 (U客论坛)。MT7620A 支持 PCIe、RGMII&#xff0c;适用于 AC7…

mt7620参考设计原理图,mt7620芯片资料,mt7620处理器资料

mt7620参考设计原理图,芯片资料,处理器资料 核心资料 芯片处理器资料 设计注意事项 处理器大全 音频语音设计资料文档(U客论坛) MT7620产品系统整合了2T2R 802.11n Wi-Fi 收发器、580MHz MIPS 24KEc™ 中央处理器 (CPU)、5 端口高速以太网络端口物理层 (Ethernet PHY)、HNAT…

MT7682参考手册,MT7682芯片资料介绍

MT7682 Reference Manual 2.总线体系结构与内存映射 MediaTek MT7682采用32位多AHB矩阵&#xff0c;为物联网和可穿戴设备提供低功耗、快速、灵活的数据操作.表2.1-1显示了总线主机之间的互连(Cortex-M4&#xff0c;四个spi主站&#xff0c;spi从机&#xff0c;调试系统&#…

MT7628 openwrt学习(1)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、拿到板子之后干的事情二、openwrt编译文件下载tftp中的坑 最后是SSH和简单的编译 前言 主要是用来记录我的MT7628踩坑经历&#xff0c;所有东西都是开源的…

mt7621芯片更换ram

最近公司设备的内存占用率过高&#xff0c;经常性的导致设备挂掉&#xff0c;于是准备换一个ram。 解决方案&#xff1a; 在openwrt目录下&#xff0c;进入target/linux/ramips/dts目录&#xff0c;找到设备使用的CPU型号对应的dts文件&#xff0c;然后修改其中内容。将memory的…

MT7621处理器资料解析,MT7621数据表

MT7621处理器资料解析,MT7621数据表 MT7621 Wi-Fi 系统单芯片包含功能强大的 880 MHz MIPS 1004KEc™ 双核心中心处理器 (CPU)、5 端口 Gigabit 以太网络交换器,以及RGMII、PCIe、USB、SD-XC 等众多连接选项。这款全新系统单芯片亦随附我们经现场验证的硬件支持,涵盖网络地…

MT6261处理器参数介绍,MT6261芯片资料

MT6261处理器&#xff1a; MT6261是一种基于低功耗CMOS工艺的集成前沿电源管理单元、模拟基带和无线电电路的单片芯片。 MT6261是一种功能丰富、功能非常强大的用于高端GSM/GPRS能力的单芯片解决方案。基于32位ARM7EJ-S TM RISC处理器&#xff0c;MT6261的卓越处理能力TH高带…

MT8167处理器型号对比,MT8167芯片资料介绍

MT8167平台有两个版本&#xff0c;分别是MT8167A和MT8167B。两者之间最大的、唯一的区别在于MT8167A提供略高的处理和图形性能规格&#xff0c;最大的区别是支持60pps的1080p视频解码&#xff08;MT8167B的30fps以上&#xff09;和全高清支持&#xff08;19201200&#xff09; …

mt7682芯片处理器详细资料介绍

MTK MT7682S是基于一个高度集成的芯片组&#xff0c;包括一个微控制器单元(MCU)、一个低功耗的1x11n单波段Wi-Fi子系统和一个电源管理单元(PMU)。单片机是一个带有浮点单元的ARM Cortex-M4处理器&#xff0c;与1MB的闪存集成在一起。 Wi-Fi子系统包含802.11b/g/n无线电、基带和…

MT7621A的首板终于收到了

经过一个近一个月的生产加工&#xff0c;MT7621A的硬件终天收到了。 先上两个图&#xff1a; 正面 刚拿到电路板&#xff0c;测试电源时竞然发现1.1VD对地短路。&#xff08;一想这个可完了&#xff0c;刚做的电路板就短路&#xff0c;一定死定了&#xff09; 通过认真仔细的分…