根据月龄计算出生日期
public class date { public static void main(String[] args) { Calendar c = Calendar.getInstance(); c.add(Calendar.YEAR, 0); c.add(Calendar.MONTH, -1); c.add(Calendar.DAY_OF_MONTH, 1);//-1 //常见的日期和时间组合的格式 /** * %tF “年-月-日”格式(4位年份) 2019-06-09 * %tD “月/日/年”格式(2位年份) 06/09/19 * %tc 全部日期和时间信息 星期日 六月 09 22:17:56 CST 2019 * %tr “时:分:秒 PM(AM)”格式(12时制) 10:41:47 下午 * %tT “时:分:秒”格式(24时制) 22:41:47 * %tR “时:分”格式(24时制) 22:42 */ String birthday = String.format("%tF", c.getTime()); // System.out.println(c.getTime()); System.out.println(birthday); } }
根据生日计算年龄
public class CalBabyJoda { private final static String birthday = "2012-3-10"; // private final static String birthday = "2012-3-10 08:20:55"; public static void main(String[] args) { while(true){ Scanner s = new Scanner(System.in); System.out.println("########################################"); DateTimeFormatter format1 = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter format2 = DateTimeFormat .forPattern("yyyy-MM-dd"); DateTime startDateTime = DateTime.parse(birthday, format2); System.out.println("宝宝来到这个世界已经"); calDateToDay(startDateTime,new DateTime()); System.out.println("如选择其它日期请输入(格式例如:2012-11-08 14:24:54或着2012-11-08)"); System.out.println("########################################"); String endDate = s.nextLine(); DateTime endDateTime = null; try{ endDateTime = DateTime.parse(endDate,format1); }catch(Exception e){ try{ endDateTime = DateTime.parse(endDate,format2); }catch(Exception e1){ System.out.println("输入格式错误!请重新输入."); continue; } } System.out.println("宝宝从出生到" + endDateTime.toString("yyyy-MM-dd HH:mm:ss") + "已经"); calDateToDay(startDateTime,endDateTime); } } public static void calDateToDay(DateTime startDateTime,DateTime endDateTime){ LocalDate start=new LocalDate(startDateTime); LocalDate end=new LocalDate(endDateTime); Days days = Days.daysBetween(start, end); int intervalDays = days.getDays(); int intervalHours = endDateTime.getHourOfDay() - startDateTime.getHourOfDay(); int intervalMinutes = endDateTime.getMinuteOfHour() - startDateTime.getMinuteOfHour(); int intervalSeconds = endDateTime.getSecondOfMinute() - startDateTime.getSecondOfMinute(); if(intervalSeconds < 0){ intervalMinutes = intervalMinutes -1; intervalSeconds = 60 + intervalSeconds; } if(intervalMinutes < 0){ intervalHours = intervalHours -1; intervalMinutes = 60 + intervalMinutes; } if(intervalHours < 0){ intervalDays = intervalDays -1; intervalHours = 24 + intervalHours; } System.out.println(intervalDays + "天" + intervalHours + "小时" + intervalMinutes + "分钟" + intervalSeconds + "秒"); System.out.println("############################"); } }
日期和时间字符串格式化
1、常用的日期格式转换符
转换符 | 说明 | 示例 |
---|---|---|
%te | 一个月中的某一天(1~31) | 2 |
%tb | 指定语言环境的月份简称 | Feb(英文)、二月(中文) |
%tB | 指定语言环境的月份全称 | February(英文)、二月(中文) |
%ta | 指定语言环境的星期几简称 | Mon(英文)、星期一(中文) |
%tA | 指定语言环境的星期几全称 | Monday(英文)、星期一(中文) |
%tc | 包括全部日期和时间信息 | 星期日 六月 09 22:17:56 CST 2019 |
%tm | 月份 | 06 |
%td | 一个月中的第几天(01~31) | 09 |
%tj | 一年中的第几天(001~366) | 160 |
%ty | 2位年份 | 19 |
%tY | 4位年份 | 2019 |
2、时间格式化转换符
转换符 | 说明 | 示例 |
---|---|---|
%tH | 2位数字的24时制的小时(00~23) | 02 |
%tk | 2位数字的24时制的小时(0~23) | 2 |
%tI(大写i) | 2位数字的12时制的小时(00~23) | 02 |
%tl(小写L) | 2位数字的12时制的小时(0~23) | 2 |
%tM | 2位数字的分钟(00~59) | 02 |
%tS | 2位数字的秒数(00~60) | 02 |
%tL | 3位数字的毫秒数(000~999)) | 902 |
%tN | 9位数字的微秒数(000000000~999999999) | 064000000 |
%tp | 指定语言环境下上午或下午标记 | 下午(中文)、pm(英文) |
%tz | 相对于GMT RFC 82 格式的数字时区偏移量 | +0800 |
%tZ | 时区缩写形式的字符串 | CST |
%ts | 1970-01-01 00:00:00至现在经过的秒数 | 1560090985 |
%tQ | 1970-01-01 00:00:00至现在经过的毫秒数 | 1560090985470 |
3、常见的日期和时间组合的格式
转换符 | 说明 | 示例 |
---|---|---|
%tF | “年-月-日”格式(4位年份) | 2019-06-09 |
%tD | “月/日/年”格式(2位年份) | 06/09/19 |
%tc | 全部日期和时间信息 | 星期日 六月 09 22:17:56 CST 2019 |
%tr | “时:分:秒 PM(AM)”格式(12时制) | 10:41:47 下午 |
%tT | “时:分:秒”格式(24时制) | 22:41:47 |
%tR | “时:分”格式(24时制) | 22:42 |
DAY_OF_MONTH:一个月的第几天,也就是口头所说的几号,比如值为1,就代表是1号;
DAY_OF_WEEK:星期几,这个值在Calendar中有对应的常量比如,星期天就用:Calendar.SUNDAY,星期一就是Calendar.MONDAY;
DAY_OF_WEEK_IN_MONTH:这个月的第几周,配合DAY_OF_WEEK,就知道这个月的具体那一天,外国人就喜欢 几月的第几周的星期几 这样的日期表示方式;
DAY_OF_YEAR:一年当中的第几天
参考: