Java和Android中的日期类,Date和SimpleDateFormat。
Date
Java中使用Date类来描述日期时间,直接创建对象并且打印日志会得到当前程序执行时间的date对象
Date date = new Date();
Log.d(TAG, "getCalendar: "+date);
得到的打印日志如下
getCalendar: Tue Mar 19 10:08:39 GMT+08:00 2024
Tue星期二 Mar19:三月19 10:08:39 GMT+08:00:东八区 2024年。
这里的时区是根据程序运行的系统设置的时区而确定的,如果是Android程序,就根据运行在设备上的时区而定,若是java程序,则是根据运行Java代码的电脑系统时区而定。我尝试将手机更改了一个时区,结果输出的时区就变了。
想要手动更改时区,可以通过TimeZone,具体做法如下,这里字符串代表亚洲/东京,即东九区。
// 创建一个TimeZone对象,表示东京时区
TimeZone timeZone = TimeZone.getTimeZone("Asia/Tokyo");
// 创建一个SimpleDateFormat对象,用于格式化日期
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss 'GMT'Z");
// 设置时区
dateFormat.setTimeZone(timeZone);
// 创建一个Date对象,表示当前时间
Date date = new Date();
// 格式化当前时间,并输出
String currentTime = dateFormat.format(date);
Log.d(TAG, "Current time in East 9th zone (Tokyo): " + currentTime);
输出的时间如下:
以下是一些常用的时区:
时区 | 表达方式 | 所处地区 |
国际日期变更线(IDLW) | Etc/GMT+12 | 贝克岛、科斯拉伊岛 |
夏威夷时间(HST) | Pacific/Honolulu | 美国夏威夷州 |
阿拉斯加时间(AKST) | America/Anchorage | 美国阿拉斯加州 |
太平洋时间(PST) | America/Los_Angeles | 美国太平洋沿岸地区 |
山地时间(MST) | America/Denver | 美国山地地区 |
中部时间(CST) | America/Chicago | 美国中部地区 |
东部时间(EST) | America/New_York | 美国东部地区 |
大西洋时间(AST) | America/Halifax | 加拿大大西洋省份 |
加拿大时间(NST) | America/St_Johns | 加拿大纽芬兰省 |
西格林尼治标准时间(GMT) | Europe/London | 英国伦敦 |
中欧时间(CET) | Europe/Paris | 法国巴黎 |
东欧时间(EET) | Europe/Istanbul | 土耳其伊斯坦布尔 |
莫斯科标准时间(MSK) | Europe/Moscow | 俄罗斯莫斯科 |
迪拜标准时间(GST) | Asia/Dubai | 阿联酋迪拜 |
印度标准时间(IST) | Asia/Kolkata | 印度新德里 |
中国标准时间(CST) | Asia/Shanghai | 中国北京、上海 |
日本标准时间(JST) | Asia/Tokyo | 日本东京 |
澳大利亚东部标准时间(AEST) | Australia/Sydney | 澳大利亚悉尼 |
太平洋标准时间(PST) | Pacific/Auckland | 新西兰奥克兰 |
默认的date打印的日期格式并不是很友好,看起来不太符合阅读模式。这时就可以用Java包中的SimpleDateFormat类了。
SimpleDateFormat
来对date进行格式化输出,变成我们想要的格式。
SimpleDateFormat中可以使用parse和format两个方法来进行格式化,format输出的是一个字符串类型,parse输出的是一个date类型。
Date date = new Date();//创建date对象
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy年MM月dd日 EEEE HH:mm");//格式化成这种形式
String format = dateFormat.format(date);//将dateFormat对象转化为字符串
try {
Date parse = dateFormat.parse(format);//字符串转化成date对象
} catch (ParseException e) {
throw new RuntimeException(e);
}
以下是常用的格式化日期和时间的字母及其含义
模式字母 | 含义 | 示例 |
y | 年份 | 2022 |
M | 月份 | 1-12 |
d | 日期 | 1-31 |
H | 小时(24小时制) | 0-23 |
h | 小时(12小时制) | 0-12 |
m | 分钟 | 0-59 |
s | 秒 | 0-59 |
S | 毫秒 | 0-999 |
E | 星期几的缩写 | Mon 周一 |
EEEE | 星期几的完整表示 | Monday 星期一 |
g | 公元 | 公元 |
z | 时区缩写 | GMT+8:00 |
Z | 时区偏移量 | +0800 |
a | 上午/下午 | AM/PM |