gpt4 book ai didi

java - 找到一个月的中间

转载 作者:行者123 更新时间:2023-11-30 07:01:12 24 4
gpt4 key购买 nike

我需要找到月中的那一刻。我不需要处理整个月,而是需要一个月的中旬和下一个月的中旬。仅供引用,用例用于绘制图表,沿着时间轴在每个月开始的每一侧涂上阴影;但这无关紧要。

整天就足够了。显然,月份的天数不都是偶数,但是像“前 15 天”这样的任意规则是可以接受的。但是,我需要以日期时间值结束,例如 DateTimeJoda-Time .

目前我使用 ±15 天作为月中的任意线。类似于以下内容。

DateTime target = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ) ;
DateTime monthStart = target.withDayOfMonth( 1 ).withTimeAtStartOfDay() ;
DateTime halfMonthPast = monthStart.minusDays( 15 ) ;
DateTime halfMonthCurrent = monthStart.plusDays( 15 ) ;
Interval halfAndHalf = new Interval( halfMonthPast , halfMonthCurrent ) ;

但是任意使用 15 天会导致没有 30 天的月份出现重叠或间隔。我宁愿计算确切的中点,这样一系列这些间隔就会整齐地相互对接,没有间隙或重叠。理想情况下,将使用半开方法,因此开始是包容性的,而结束是排他性的。

[4 月中旬至 5 月中旬][5 月中旬至 6 月中旬][6 月中旬至 7 月中旬]

使用 Joda-Time 或 java.time 将是首选路线。

最佳答案

您需要找到一个月中的总天数,然后找到该月的中间日期。

这还取决于您希望 15 日还是 16 日成为 31 天的月份的中点。

int iYear = 2015; //Substitue for current year
int iMonth = Calendar.FEBRUARY; // Substitute for month
int iDay = 1;

// Create a calendar object and set year and month
Calendar mycal = new GregorianCalendar(iYear, iMonth, iDay);

// Get the number of days in that month
int daysInMonth = mycal.getActualMaximum(Calendar.DAY_OF_MONTH); // 28

//Use this if you want 15th to be mid date for a month of 31 days)
int midDay= (daysInMonth) /2 ;
//Use this if you want 16th to be mid date for a month of 31 days)
int midDay = (int)Math.ceil(((double)daysInMonth)/2);

Calendar mycal = new GregorianCalendar(iYear, iMonth, midDay);

关于java - 找到一个月的中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30010117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com