日期在java中将时间戳转换为特定格式(年、月、周、天、时间、小时、分钟和秒)
这是我的密码
例如,2年、2个月、1周、2天、1小时、2分钟、35秒
String stdate ="01/01/2014 09:30:30";
String endate ="09/11/2015 11:30:30";
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
Date d1 = new Date();
Date d2 = new Date();
long year =(1000*60*60*24*365l);
long month =(1000*60*60*24*30l);
long weeks =(1000*60*60*24*7l);
long days =(1000*60*60*24l);
try{
d1 = df.parse(stdate);
d2 = df.parse(endate);
long diff = d2.getTime()-d1.getTime();
long diffYear = diff/(1000*60*60*24*365l);
long diffMonth = (diff-(diffYear*year))/month;
long diffWeeks = ((diff%month))/weeks;
long diffDays = ((diff%weeks))/days;
System.out.println(diffYear+" years ");
System.out.println(diffMonth+" months ");
System.out.println(diffWeeks+" week ");
System.out.println(diffDays+" days "); // wrong output,
}catch(Exception e){
}
o/p:
1年
10个月
2周
5天
我不想利用乔达的时间。它应该在java中。util.*
请回答,提前谢谢
# 1 楼答案
你可以尝试从Joda-time使用Period
输出:
更新:
回答你最初的问题:就像你从
diff
中减去已经属于year
的天数来计算月份一样,你需要减去year
和month
上用于计算weeks
的天数之和days
,则已属于年、月、周的天数总和所以你的代码看起来像
警告:这种计算天数或周数的方法将每个月视为30天,这并不总是正确的,因为也可能有28、29、30、31天的月份。这就是为什么你会看到
5
而不是1
天警告2:不要使用
1000*60*60*24*365l
,对于较大的数字,它可能会导致整数溢出(使用的第一个数字是整数),而应该使用1000L*60*60*24*365
。所以l
更改为L
,因为l
看起来像1
,所以可能会让人困惑long
相乘李>为了让事情变得更简单,你甚至可以把它写成