銀行休業日と週末を合計期間にカウントしないことを考慮せずに、正常に機能するストップウォッチを実装しました。経過時間を取得し、開始時刻、終了時刻、および一連の銀行休業日 (週末はカウントされません) を渡すことができるオープンソース ライブラリを探していました。作業を簡単にする唯一のライブラリは net.sf.jtemporal ですが、機能を拡張する必要があります。必要な機能を取得するための便利なライブラリがあるかどうか、誰か教えてもらえますか?
2177 次
5 に答える
2
そこで述べたように、おそらく最善かつ最も簡単な方法は、各日に関する情報を含むテーブルを作成することです (最初からの稼働日/銀行休業日など; 1 日あたり 1 行 = 1 年あたり 365 行)。次に、count 関数を使用します。 / 適切な選択で。
于 2008-09-18T13:41:54.833 に答える
1
そのような特定の何かを見つけることができるとは思えません。しかし、独自のロジックを作成するのは簡単です。ここにいくつかの擬似コードがあります...
private long CalculateTimeSpan(DateTime BeginDate, DateTime EndDate, ArrayList<DateTime> BankHollidays)
{
long ticks = 0;
while (BeginDate <= EndDate) // iterate until reaching end
{
if ((BeginDate is holliday?) || (BeginDate is Weekend?))
skip;
else
ticks += (24*60*60*1000);
BeginDate = BeginDate + 1 day; // add one day and iterate
}
return ticks;
}
于 2008-09-18T13:54:22.510 に答える
0
Joda Timeをご覧ください。これは、Java に含まれているものよりもはるかに優れた日付/時刻 API です。
于 2008-09-18T13:57:29.070 に答える
0
これは、あなたが探しているものに対する有効な解決策になると思います。銀行休業日と週末をカウントせずに、経過時間を計算します (1 営業日は 24 時間であると見なします)。
/**
* Calculate elapsed time in milliseconds
*
* @param startTime
* @param endTime
* @return elapsed time in milliseconds
*/
protected long calculateElapsedTimeAux(long startTime, long endTime) {
CustomizedGregorianCalendar calStartTime = new CustomizedGregorianCalendar(this.getTimeZone());
CustomizedGregorianCalendar calEndTime = new CustomizedGregorianCalendar(this.getTimeZone());
calStartTime.setTimeInMillis(startTime);
calEndTime.setTimeInMillis(endTime);
long ticks = 0;
while (calStartTime.before(calEndTime)) { // iterate until reaching end
ticks = ticks + increaseElapsedTime(calStartTime, calEndTime);
}
return ticks;
}
private long increaseElapsedTime(CustomizedGregorianCalendar calStartTime, CustomizedGregorianCalendar calEndTime) {
long interval;
long ticks = 0;
interval = HOURS_PER_DAY*MINUTES_PER_HOUR*SECONDS_PER_MIN*MILLISECONDS_PER_SEC; // Interval of one day
if ( calEndTime.getTimeInMillis() - calStartTime.getTimeInMillis() < interval) {
interval = calEndTime.getTimeInMillis() - calStartTime.getTimeInMillis();
}
ticks = increaseElapsedTimeAux(calStartTime, calEndTime, interval);
calStartTime.setTimeInMillis(calStartTime.getTimeInMillis() + interval);
return ticks;
}
protected long increaseElapsedTimeAux(CustomizedGregorianCalendar calStartTime, CustomizedGregorianCalendar calEndTime, long interval) {
long ticks = 0;
CustomizedGregorianCalendar calNextStartTime = new CustomizedGregorianCalendar(this.getTimeZone());
calNextStartTime.setTimeInMillis(calStartTime.getTimeInMillis() + interval);
if ( (calStartTime.isWorkingDay(_nonWorkingDays) && calNextStartTime.isWorkingDay(_nonWorkingDays)) ) { // calStartTime and calNextStartTime are working days
ticks = interval;
}
else {
if (calStartTime.isWorkingDay(_nonWorkingDays)) { // calStartTime is a working day and calNextStartTime is a non-working day
ticks = (calStartTime.getNextDay().getTimeInMillis() - calStartTime.getTimeInMillis());
}
else {
if (calNextStartTime.isWorkingDay(_nonWorkingDays)) { // calStartTime is a non-working day and calNextStartTime is a working day
ticks = (calNextStartTime.getTimeInMillis() - calStartTime.getNextDay().getTimeInMillis());
}
else {} // calStartTime and calEndTime are non-working days
}
}
return ticks;
}
于 2008-09-26T08:54:31.687 に答える
0
銀行の営業時間も数えますか?午前9時~午後3時?それとも1日24時間ですか?
于 2008-09-18T13:28:39.937 に答える