android.text.format.DateFormat的使用

本文介绍如何使用Android中的DateFormat工具类来格式化Date实例。通过使用DateFormat的format方法,可以根据预设的日期时间模式字符串来定制化显示日期格式。文中详细解释了模式字母的含义及其在不同数量下所代表的不同形式。

使用DateFormat格式化Date

DateFormat是android.text.format中的一个工具类,通过使用DateFormat我们可以将Date类格式化成我们想要的类型。

因为默认的Date.toString()方法返回的是一个时间戳,不符合我们阅读的习惯,所以用DateFormat的format()方法进行格式化就成为了比较重要的任务。
DateFormat类的format方法如下所示:

从图中可以看出format方法有三种重载

由于我们要格式化Date类型,所以选用第一种形式的format方法。其中inDate自然是我们要格式化的Date实例,而第一个参数inFormat则是我们用来设定Date具体格式化模式的日期时间模式字符串(date and time pattern strings)
date and time pattern strings中,未被单引号引用的字母从’A’ to ‘Z’和’a’ to ‘z’被解释为模式字母,代表着日期和时间的字符串,其他的字母或符号在格式化时只被单纯的复制而不进行解释。

例如:”EEEE,MMMMdd,yyyy”就被解释为”Wednesday, Jul 22, 2015”,其中‘,’直接被复制,不进行解释,而其他字母由于未被单引号引用所以被解释成其代表的日期和时间字符串。

模式字母的定义如下图:

这里写图片描述

y表示年份,m表示月份,d表示日期等等,每个字母的presentation需特别注意,不同的presentation有着不同的属性。

其中

  • Text:当模式字母的个数不小于4个时,使用日期的完整形式,如:“Wednesday”,否则使用可用的简化形式“Wed”。
  • Month: 当模式字母的个数不小于3个时,月份被解释为文本,否则被解释为数字。
  • Year: 当模式字母的个数为2个时,年份为两位数字,否则被解释为数字。

其他的就不一一介绍了,大家有兴趣的可以去官网自己查看。

最后附上例子:

这里写图片描述

anr问题trace如下: "main" prio=5 tid=1 Blocked | group="main" sCount=1 ucsCount=0 flags=1 obj=0x72df6468 self=0xb400007072878c00 | sysTid=3104 nice=-2 cgrp=ssfg sched=0/0 handle=0x71230e9d28 | state=S schedstat=( 273294290029 918944300434 897810 ) utm=18065 stm=9263 core=5 HZ=100 | stack=0x7fe106e000-0x7fe1070000 stackSize=8188KB | held mutexes= at com.android.server.alarm.AlarmManagerService$DeliveryTracker.onSendFinished(AlarmManagerService.java:5798) - waiting to lock <0x09677b19> (a java.lang.Object) held by thread 281 at android.app.PendingIntent$FinishedDispatcher.run(PendingIntent.java:382) at android.os.Handler.handleCallback(Handler.java:973) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:282) at android.os.Looper.loop(Looper.java:387) at com.android.server.SystemServer.run(SystemServer.java:1069) at com.android.server.SystemServer.main(SystemServer.java:677) at java.lang.reflect.Method.invoke(Native method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:983) DumpLatencyMs: 212.411 "binder:3104_E" prio=5 tid=281 Runnable | group="main" sCount=0 ucsCount=0 flags=0 obj=0x1770d568 self=0xb400006e2db00800 | sysTid=4606 nice=-2 cgrp=ssfg sched=1073741824/0 handle=0x6e0b1ab730 | state=R schedstat=( 113789554601 690500424244 405734 ) utm=6620 stm=4758 core=5 HZ=100 | stack=0x6e0b0b4000-0x6e0b0b6000 stackSize=989KB | held mutexes= "mutator lock"(shared held) at android.icu.util.Currency.getAvailableCurrencyCodes(Currency.java:200) at libcore.icu.ICU.getCurrencyCode(ICU.java:671) at java.util.Currency.getInstance(Currency.java:421) at java.text.DecimalFormatSymbols.initializeCurrency(DecimalFormatSymbols.java:933) at java.text.DecimalFormatSymbols.setCurrency(DecimalFormatSymbols.java:508) at java.text.DecimalFormatSymbols.fromIcuInstance(DecimalFormatSymbols.java:1085) at java.text.DecimalFormat.getDecimalFormatSymbols(DecimalFormat.java:2819) at java.text.SimpleDateFormat.zeroPaddingNumber(SimpleDateFormat.java:1678) at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1593) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:1117) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:1087) at java.text.DateFormat.format(DateFormat.java:333) at java.text.Format.format(Format.java:159) at com.android.server.alarm.AlarmManagerService.setImplLocked(AlarmManagerService.java:2473) at com.android.server.alarm.AlarmManagerService.setImpl(AlarmManagerService.java:2425) - locked <0x09677b19> (a java.lang.Object) at com.android.server.alarm.AlarmManagerService$4.set(AlarmManagerService.java:3103) at android.app.IAlarmManager$Stub.onTransact(IAlarmManager.java:198) at android.os.Binder.execTransactInternal(Binder.java:1523) at android.os.Binder.execTransact(Binder.java:1457) DumpLatencyMs: 84.4358这最后分析是什么结果呢
08-20
import java.text.DateFormat import java.text.SimpleDateFormat plugins { id 'com.android.library' } android { compileSdkVersion 28 defaultConfig { minSdkVersion 18 targetSdkVersion 28 buildConfigField "String", "BUILD_TIME", "\"" + getDate() + "\"" } buildTypes { release_st { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release_sop { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java'] res.srcDirs = ['src/main/res'] aidl.srcDirs = ['src/main/aidl'] } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } repositories { flatDir { dirs 'libs' } } dependencies { implementation 'androidx.appcompat:appcompat:1.1.0' } static String getDate() { DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss") return df.format(Calendar.getInstance(Locale.CHINA).getTime()) } static def getGitCommitDate() { //def cmd = 'git log --pretty=format:%at -1' //def gitCommit = cmd.execute().text.trim() + "000" def formattedDate = "2023-11-10"//new Date(Long.decode(gitCommit)).format('yyyy-MM-dd') formattedDate } task makeJar(type: Jar) { archivesBaseName = "isa-navilib" // from(project.zipTree('build/intermediates/packaged-classes/release/classes.jar')) //4.0后classes位置 from(project.zipTree('build/intermediates/aar_main_jar/release/classes.jar')) destinationDirectory.set(file('build/libs')) } makeJar.dependsOn(build) 这是build.gradle文件
08-20
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值