将时间戳转换为java中的特定格式(年,月,周,日,时间,小时,分钟和秒)
这是我的代码,
例如。 2年,2个月,1周2天,1小时,2分35秒。
e.g. 2year, 2 month, 1 week 2 days, 1 hour, 2 minutes , 35 seconds.
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天
1 years
10 months
2 week
5 days
我不想使用joda时间。它应该在 java.util。*;
I do not want to use joda time. it should be in java.util.*;
请提前感谢。
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 = df.parse(stdate);
Date d2 = df.parse(endate);;
DateTime startTime = new DateTime(d1), endTime = new DateTime(d2);
Period p = new Period(startTime, endTime);
System.out.printf("%-8s %d %n","years:",p.getYears());
System.out.printf("%-8s %d %n","months:",p.getMonths());
System.out.printf("%-8s %d %n","weeks:",p.getWeeks());
System.out.printf("%-8s %d %n","days:",p.getDays());
System.out.printf("%-8s %d %n","hours:",p.getHours());
System.out.printf("%-8s %d %n","minutes:",p.getMinutes());
System.out.printf("%-8s %d %n","second:",p.getSeconds());
输出:
years: 1
months: 10
weeks: 1
days: 1
hours: 2
minutes: 0
second: 0
更新:
Update:
回答您的原始问题:就像您从 diff $ c $中减去已经属于
年的日期
c>计算月份,您需要减去
To answer your original question: Just like you are subtracting days that already belongs to year
from diff
to calculate months, you need to subtract
-
年使用的天数总和
和月份
来计算周
- 已经属于年,月,周如果要计算
天
- sum of days used on
year
andmonth
to calculateweeks
- sum of days which already belong to year, month, week if you want to calculate
days
所以你的代码可以看起来像
so your code can look like
long diffYear = diff / year;
long diffMonth = (diff - (diffYear * year)) / month;
//long diffWeeks= ((diff % month)) / weeks;
long diffWeeks = (diff - (diffYear * year + diffMonth * month)) / weeks;
//long diffDays = ((diff % weeks)) / days;
long diffDays = (diff - (diffYear * year + diffMonth * month + diffWeeks*weeks)) / days;//((diff % weeks)) / days;
警告:这种计算日或周的方式将会将每个月视为30天,这并不总是真的,因为也可以有28,29,30,31天的月份。这就是为什么而不是 1
日,你会看到 5
。
WARNING: This way of calculating days or weeks will treat each month as 30 days, which is not always true, because there can be also 28,29,30,31 day months. That is why instead of 1
day you will see 5
.
警告2 :而不是 1000 * 60 * 60 * 24 * 365l
对于较大的数字可能会导致整数溢出(使用的第一个数字整数),您应该使用 1000L * 60 * 60 * 24 * 365
。所以
WARNING 2: Instead of 1000*60*60*24*365l
which for larger numbers can cause integer overflow (first numbers used are integers) you should use 1000L*60*60*24*365
. So
- 更改
l
至L
因为l
看起来像1
,所以可能会令人困惑, - 开始乘以
long
。
- change
l
toL
becausel
looks like1
so it can be confusing, - start multiplying with
long
.
为了使事情变得更容易,你甚至可以写它作为
To make things easier you can even write it as
long seconds = 1000L;
long minutes = seconds * 60;
long hours = minutes * 60;
long days = hours * 24;
long weeks = days * 7;
long month = days * 30;
long year = days * 365;