根据日期获取,x岁x月x天

本文介绍了使用C#、PHP和Java三种编程语言计算两个日期之间的年龄、月份和天数差的方法。通过比较月份和天数来精确计算,适用于各种需要日期计算的场景。

c#:

 DateTime startDate = new DateTime();
            DateTime endDate = new DateTime();

            int age =0;
            int month = 0;
            int day = 0;
         
            if (endDate.Month>startDate.Month)
            {
                age = endDate.Year - startDate.Year;
                month = endDate.Month - startDate.Month;
            }
            else 
            {
                age = endDate.Year - startDate.Year-1;
                month =12+ endDate.Month - startDate.Month;
            }

            if (endDate.Day>startDate.Day)
            {
                day = endDate.Day - startDate.Day;
            }
            else
            {
                //上个月天数-startDate.Day+endDate.Day
                day = (endDate-endDate.AddMonths(-1)).Days  - startDate.Day+endDate.Day;
                month--;
            }
            Response.Write(string.Format("{0}岁{1}月{2}天", age, month, day));

php:

        $age=0;
        $month=0;
        $day=0;
        
        $startDate=strtotime("2010-09-08 07:06:05");
        $endDate=strtotime("2015-06-05 07:06:05");
        if(date('n',$endDate)>date('n',$startDate)){
            $age=date('Y',$endDate)-date('Y',$startDate);
            $month=date('n',$endDate)-date('n',$startDate);
        }else{
            $age=date('Y',$endDate)-date('Y',$startDate)-1;
            $month=12+date('n',$endDate)-date('n',$startDate);
        }
        
        if(date('j',$endDate)>date('j',$startDate)){
            $day = date('j',$endDate)-date('j',$startDate);
        }else{
            $day= date('t',strtotime('-1 Month',$endDate))-date('j',$startDate)+date('j',$endDate);
            $month--;
        }        
        echo  sprintf('%s岁%s月%s天',$age,$month,$day);

java:

 

 Calendar startDate = Calendar.getInstance();
           startDate.setTime(new SimpleDateFormat("yyyy-MM-dd").parse("2010-09-08"));
           
           Calendar endDate = Calendar.getInstance();
           endDate.setTime(new SimpleDateFormat("yyyy-MM-dd").parse("2010-10-5"));
           
           int age =0;
           int month = 0;
           int day = 0;
           if(endDate.get(Calendar.MONTH)>startDate.get(Calendar.MONTH)){
               age = endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR);
            month = endDate.get(Calendar.MONTH)-startDate.get(Calendar.MONTH);               
           }else{
               age = endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR)-1;
            month =12+ endDate.get(Calendar.MONTH)-startDate.get(Calendar.MONTH);               
           }
           
           
           if(endDate.get(Calendar.DAY_OF_MONTH)>startDate.get(Calendar.DAY_OF_MONTH)){
               day = endDate.get(Calendar.DAY_OF_MONTH)-startDate.get(Calendar.DAY_OF_MONTH);           
           }else{
               Calendar preEndDate = Calendar.getInstance();  
               preEndDate.set(Calendar.YEAR, endDate.get(Calendar.YEAR));  
               preEndDate.set(Calendar.MONTH, endDate.get(Calendar.MONTH)-1);  
               preEndDate.set(Calendar.DATE, 1);
               preEndDate.roll(Calendar.DATE, -1);
               int preMonthDays = preEndDate.get(Calendar.DATE);  //获取endDay 上个月的天数
               
               day =preMonthDays+endDate.get(Calendar.DAY_OF_MONTH)-startDate.get(Calendar.DAY_OF_MONTH);
               month--;           
           }
           
           System.out.printf("%s岁%s月%s天",age,month,day);

 

 

转载于:https://www.cnblogs.com/zhudongchang/p/4643299.html

Java中,可以使用`java.time.LocalDate`类来处理日期,并结合一些逻辑来确定给定日期所属季度的起始份以及具体的某一。季度通常按照日历年分为四个部分:第一季度(1-3)、第二季度(4-6)、第三季度(7-9)和第四季度(10-12)。每个季度的第一通常是该季度第一个的第一,而最后一则是该季度最后一个的最后一。 要获取指定日期所在季度的起始份,可以通过将份除以3并向上取整来得到季度编号,然后乘以3减去2来确定起始份。例如,如果日期是在4,则季度编号为2,起始份为4(即第二季度)。具体实现如下: ```java import java.time.LocalDate; import java.time.Month; public class QuarterUtil { public static void main(String[] args) { LocalDate date = LocalDate.of(2023, 5, 15); // 示例日期为2023年515日 int quarter = (date.getMonthValue() + 2) / 3; // 计算季度编号 Month startMonth = Month.of((quarter - 1) * 3 + 1); // 根据季度编号计算起始份 LocalDate quarterStart = LocalDate.of(date.getYear(), startMonth, 1); // 季度起始日期 System.out.println("The start of the quarter: " + quarterStart); } } ``` 上述代码片段中,首先通过`LocalDate.of()`方法创建了一个示例日期对象,代表2023年515日。接着计算出该日期所在的季度编号,这里采用了一个简单的数学公式`(monthValue + 2) / 3`来确定季度编号,其中`monthValue`是从1到12的整数表示份。之后,根据这个季度编号计算出起始份,这里利用了季度与份之间的关系,即每个季度相隔3个,因此可以通过`(quarter - 1) * 3 + 1`得到起始份。最后,使用`LocalDate.of()`方法创建了一个新的日期对象,代表该季度的第一。 对于获取季度中的具体某一,只需要知道季度开始日期后,加上所需的数即可。例如,若想获取季度开始后的第45,可以这样做: ```java LocalDate specificDayInQuarter = quarterStart.plusDays(44); // 获取季度开始后的第45 System.out.println("Specific day in the quarter: " + specificDayInQuarter); ``` 这段代码展示了如何从季度开始日期出发,通过调用`plusDays()`方法增加指定数来获得季度内的特定日期。注意这里加的是44而不是45,因为季度开始日期已经是第一了。 以上方法能够帮助开发者灵活地处理与季度相关的日期计算问题,适用于财务报告、数据分析等多种应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值