gpt4 book ai didi

java - PST 时间换算

转载 作者:行者123 更新时间:2023-12-01 09:30:16 29 4
gpt4 key购买 nike

正在计算每月的最后一个工作日,合并如下 -

• AI.VOUCHER_DT >= 本月最后一个工作日下午 5:00(太平洋标准时间)

• AI.VOUCHER_DT <= 本月最后一个日历日太平洋标准时间 11:59:59

• 当前系统日期/时间 < 下个月的第 3 个工作日

例如,2月28日(周六)为当月最后一个日历日,计时累积文件应包含2月27日(周五)下午5:00至2月28日下午23:59:59之间创建的凭证(星期六)。这些记录将一直保留到 3 月 4 日,在本例中是该月的第 3 个工作日。

我如何比较这个。

最佳答案

我创建了一个会计日期类,它生成您要求的 3 个会计日期。

我运行了两项测试,一项是在 2015 年 2 月进行的,一项是在 2016 年 8 月进行的。以下是测试结果。

Fri, 27 Feb 2015 17:00:00 PST
Sat, 28 Feb 2015 23:59:59 PST
Wed, 04 Mar 2015 00:00:00 PST

Wed, 31 Aug 2016 17:00:00 PDT
Wed, 31 Aug 2016 23:59:59 PDT
Mon, 05 Sep 2016 00:00:00 PDT

第一个日期是该月的最后一个工作日,第二个日期是该月的最后一天,第三个日期是下个月的第三个工作日。

这是代码。我使用 Calendar 类来进行日期计算。输入月份从零开始。 0 = 一月,1 = 二月,依此类推

package com.ggl.testing;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class FiscalDate {

public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z");
sdf.setTimeZone(getTimeZone());

displayDates(sdf, 2015, 1);
displayDates(sdf, 2016, 7);
}

private static void displayDates(SimpleDateFormat sdf, int year, int month) {
Date date = calculateLastBusinessDay(year, month);
System.out.println(sdf.format(date));
date = calculateLastDay(year, month);
System.out.println(sdf.format(date));
date = calculateThirdBusinessDay(year, month);
System.out.println(sdf.format(date));
System.out.println();
}

public static Date calculateLastBusinessDay(int year, int month) {
Calendar calendar = calculateLastCalendarDay(year, month);

while (!isWeekday(calendar)) {
calendar.add(Calendar.DAY_OF_MONTH, -1);
}

calendar.set(Calendar.HOUR_OF_DAY, 17);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);

return calendar.getTime();
}

public static Date calculateLastDay(int year, int month) {
Calendar calendar = calculateLastCalendarDay(year, month);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);

return calendar.getTime();
}

public static Date calculateThirdBusinessDay(int year, int month) {
Calendar calendar = calculateLastCalendarDay(year, month);
int weekdayCount = 0;

while (weekdayCount < 3) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
weekdayCount += isWeekday(calendar) ? 1 : 0;
}

calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);

return calendar.getTime();
}

private static Calendar calculateLastCalendarDay(int year, int month) {
Calendar calendar = Calendar.getInstance(getTimeZone());
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH,
calendar.getActualMaximum(Calendar.DAY_OF_MONTH));

return calendar;
}

private static boolean isWeekday(Calendar calendar) {
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
return (dayOfWeek == Calendar.MONDAY)
|| (dayOfWeek == Calendar.TUESDAY)
|| (dayOfWeek == Calendar.WEDNESDAY)
|| (dayOfWeek == Calendar.THURSDAY)
|| (dayOfWeek == Calendar.FRIDAY);
}

private static TimeZone getTimeZone() {
return TimeZone.getTimeZone("America/Los_Angeles");
}

}

如果您所在的位置与美国不同,您将使用不同的时区。

关于java - PST 时间换算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39487761/

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