Am/Pm,日期格式,日期字串客制化


一、时间格式

时间的小时制分为12小时制和24小时制。由于一天是24小时,如果是12小时制必须把一天分为2段,为了区分当前时间是哪一段,因此在显示上必须加上一个标记。一般是凌晨开始到中午是一个时间段叫做上午(am),下一个时间段就是下午(pm).比如上午8点、下午2点。

在Android时间显示上每种语言默认时间格式不同,标记时间段的翻译也不同。比如英文默认是24小时制,时间段使用am、pm;中文默认是12小时制,时间段使用上午、下午。

这些都是在ICU里面定义的,具体定义在external\icu4c\data\locales\xx.txt(xx是语言代码,ISO_639-1),找到gregorian部分,如波斯fa.txt中定义
gregorian{
AmPmMarkers{
     "قبل‌ازظهر",----->am
"
بعدازظهر",-----àpm
}
DateTimePatterns{
"H:mm:ss (zzzz)",----àH代表24小时制,h代表12小时制
"H:mm:ss (z)",
"H:mm:ss",
"H:mm",
……

AmPmMarkers这个就是定义时间段字串,H:mm是时间格式显示,对于其他语言比如印尼语显示为H.mm如果要修改时间段、小时制或者显示格式,可以在此处修改。注意修改ICU资源需要单独编译ICU资源,在new整个工程,否则不会其效果。

二、日期格式

日期显示多种多样,有的带有年份,有的没有,有的月份是全称,有的是简写,比如下拉通知栏日期显示为:TUE,JANUARY 1 Setting里面日期显示为:2013 Jan 1,Tue

如何控制这些显示模式、以及这些子串在那定义呢?

一般日期显示会实例化一个Date Format实例,这个实例在format需要三个参数,一个时间,一个是Locale(指定使用那个语言字串串,默认是系统语言),另一个就是显示模式了(format string).

如下例子:

  1. long time = SystemClock.currentThreadTimeMillis();
  2. SimpleDateFormat shortDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm, EE",new Locale(“zh”));
  3. String sDate = shortDateFormat.format(new Date(time));
  4. textView.setText(sDate);

几点说明:

1) 年、月、星期是简写还是全部显示,有对应字母个数决定,如:

  • yyyy年份全称,yy是简写,2010,10
  • MMMM显示全称,MMM简写,MM阿拉伯数字全称,M阿拉伯数字简称January,Jan,01,1
  • EEEE 星期的全称,EE 星期的简称Tuesday, Tue
  • dd 日的全称,d日的简称01, 1

2) 上述这些月、星期的字串也是定义在ICU的locale里面各个语言资源文件中。

版权所有丨如未注明,均为原创,转载请注明转自:https://whonee.net/am-pm-date-format-custom.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注