怎样在EXCEL计算两个日期中间间隔几年几个月几天
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样在EXCEL计算两个日期中间间隔几年几个月几天相关的知识,希望对你有一定的参考价值。
例如:某人入职时间2002年6月3日,离职时间2007年12月31日,
怎样计算中间间隔了几年几个月零几天?
我只会用DATEDIF(入职时间,$截止时间,“y”)&“年”&DATEDIF(入职时间,$截止时间,“ym”)&+1&“个月”计算出精确到月,但是,现在想求大神指教怎样计算几年几个月零几天?
可用公式DATEDIF(A2,B2,"y")&"年"&DATEDIF(A2,B2,"ym")&"月"&DATEDIF(A2,B2,"Md")&"日"来计算。
1、以excel2010版本为例,如下图所示,有入职时间和离职时间;
2、首先在C2单元格输入=DATEDIF(A2,B2,"y")&"年" 求出几年;
3、然后再输入DATEDIF(A2,B2,"ym")&"月"求出几月,中间用符号&连接;
4、最后输入DATEDIF(A2,B2,"Md")&"日"求出几日,中间也是用符号&连接;
5、填完公式后按enter键即可计算出入职时间和离职时间的时间间隔了。
参考技术A方法:
1、打开EXCEL表格,在日期单元格后输入:=DATEDIF(C1,C2,"y")&"年"&(DATEDIF(C1,C2,"YM"))&"月"&DATEDIF(C1,C2,"Md")&"天"
2、之后就可以精确计算出两个日期相减的“年、月、日”。
参考技术B A1 :2002年6月3日,A2:2007年12月31日A3:
=INT((DATEDIF(A1,A2,"d")-MOD(DATEDIF(A1,A2,"d"),30))/30/12)&"年"&MOD((DATEDIF(A1,A2,"d")-MOD(DATEDIF(A1,A2,"d"),30))/30,12)&"月"&MOD(DATEDIF(A1,A2,"d"),30)&"日"
上面公式会差几天,用下面这个就不会错了:
A1 :2002年6月3日,A2:2007年12月31日
=DATEDIF(A1,A2,"y")&"年"&(DATEDIF(A1,A2,"YM"))&"月"&DATEDIF(A1,A2,"Md")&"日"本回答被提问者和网友采纳 参考技术C =2007年12月31日-2002年6月3日 参考技术D 现在在excel里用的函数是DAYS,输入两个日期求天数 DAYS(R12C1,R12C2),这里的R12C1和R12C2是日期所在的excel的位置。
将日期分为几年,几个月,几天,几小时的单独部分。 Java的
有没有办法通过计算两个日期之间的差异来计算一些天数,分成不同的部分,例如: 364天它将是:0年,11个月,30天,小时,分钟等我认为使用逻辑运算符可能像%和/一样工作,但因为不同月份有不同的天数,有些年份是闰年我是不知道怎么做。任何帮助将非常感激。我的代码:
import java.util.*;
public class CleanDate {
public static void main(String[] args) {
Calendar cDate = GregorianCalendar.getInstance();
cDate.set(2011, 0, 31, 00, 00, 00);
Date date1 = cDate.getTime();
Date date2 = new Date();
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.setTime(date1);
calendar2.setTime(date2);
long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffSeconds = diff / 1000;
long diffMinutes = diff / (60 * 1000);
long diffHours = diff / (60 * 60 * 1000);
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.println("Time in minutes: " + diffMinutes + " minutes.");
System.out.println("Time in hours: " + diffHours + " hours.");
System.out.println("Time in days: " + diffDays + " days.");
}
}
你可以像这样有效地使用Joda Time:Interval
允许获得两个日期之间的时间间隔。
DateTime end = new DateTime(2006, 1, 1, 0, 0, 0, 0);
Interval interval = new Interval(start, end);
Period period = interval.toPeriod();
System.out.println(period.getYears()+" years, "
period.getMonths()+" months, "+period.getWeeks()+" weeks, "+period.getDays()+", days");
tl;dr
Duration.between( // Represent a span-of-time unattached to the timeline, on scale of days-hours-minutes-seconds.
ZonedDateTime // Represent a moment in the wall-clock time used by the people of a particular region (a time zone).
.of( 2011 , 1 , 31 , 0 , 0 , 0 , 0 , ZoneId.of( "Africa/Tunis" ) )
,
ZonedDateTime.of( … )
) // Returns a `Duration` object.
.toDaysPart() // Or `toHoursPart`, `toMinutesPart`, `toSecondsPart`, `toNanosPart`. These return either a `long` or an `int`.
java.time
现代方法使用java.time类而不是可怕的旧Date
和Calendar
类。在other Answer中看到的Joda-Time库也被java.time取代。
指定日期和时间需要时区来确定确切的时刻。在任何特定时刻,日期和时间都按地区不同而不同。
以proper time zone name的格式指定continent/region
,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
如果您想要当天的第一时刻,请让java.time确定该区域中该日期的时间。一天不总是在00:00:00开始。
LocalDate ld = LocalDate.of( 2011 , Month.JANUARY , 31 ) ;
ZonedDateTime start = ld.atStartOfDay( z ) ; // Let java.time determine the first moment of the day. Never assume 00:00:00.
使用Duration
类计算经过的天数(实际上是24小时的时间段),小时,分钟和秒。对于数月 - 日(日历日,而不是24小时的时间段),请使用Period
类。
ZonedDateTime stop = … ;
Duration d = Duration.between( start , stop ) ;
使用标准String
格式生成带有文本的ISO 8601对象。
String output = d.toString() ; // Generate standard ISO 8601 text.
Pteham42.ha_khas
提取各种作品。
long days = d.toDaysPart() ; // 24-hour chunks of time, *not* calendar days.
int hours = d.toHoursPart() ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
int nanos = d.toNanosPart() ; // Fractional second as a count of nanoseconds, from 0 to 999,999,999.
Years-months-days versus days-hours-minutes-seconds
如果你考虑一下,尝试用几年 - 几天 - 几小时 - 几分钟 - 秒来表示一段时间很少是有意义的。涉及棘手的问题,例如日历天与24小时的时间段,以及天数变化的事实,例如23,24,25或其他小时数。
但是如果您真的坚持这种方法,请将ThreeTen-Extra库添加到您的项目中以访问PeriodDuration
类。本课程尝试将这两个概念结合起来。
ISO-8601日历系统中结合了句点和持续时间的时间量。
此类根据期间和持续时间对数量或时间进行建模。期间是基于日期的时间量,包括年,月和日。持续时间是基于时间的时间量,包括秒和纳秒。有关更多详细信息,请参阅Period和Duration类。
一段时间内的日子考虑了夏令时的变化(23或25小时)。执行计算时,首先添加周期,然后添加持续时间。
About java.time
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.Date
,Calendar
和SimpleDateFormat
。
现在在Joda-Time的maintenance mode项目建议迁移到java.time班。
要了解更多信息,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规格是JSR 310。
您可以直接与数据库交换java.time对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
- Java SE 8,Java SE 9,Java SE 10,Java SE 11和更高版本 - 带有捆绑实现的标准Java API的一部分。 Java 9增加了一些小功能和修复。
- Java SE 6和Java SE 7 大部分java.time功能都在ThreeTen-Backport中反向移植到Java 6和7。
- Android 更高版本的Android捆绑java.time类的实现。 对于早期的Android(<26),ThreeTenABP项目适应ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…。
ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。你可能会在这里找到一些有用的类,如Interval
,YearWeek
,YearQuarter
和more。
以上是关于怎样在EXCEL计算两个日期中间间隔几年几个月几天的主要内容,如果未能解决你的问题,请参考以下文章