• R/O
  • SSH
  • HTTPS

protra: Commit


Commit MetaInfo

Revision520 (tree)
Time2014-04-23 00:16:36
Authorpanacoran

Log Message

PriceDataUpdatorの営業日についてのループを簡略化する

* Protra.Lib/Update/PriceDataUpdator.cs (PriceDataUpdator.AdjustedDate): 削除。
(PriceDataUpdator.ListOpenDates): 新規。開始日と終了日の間の営業日を列挙する。
(PriceDataUpdator.NextDate): 削除。
(PriceDataUpdator.UpdatePrice): ListOpenDatesを使う。
* Protra.Lib/Update/YahooFinanceUpdator.cs (YahooFinanceUpdator.UpdatePrice): 同上。

Change Summary

Incremental Difference

--- protra/trunk/ChangeLog.txt (revision 519)
+++ protra/trunk/ChangeLog.txt (revision 520)
@@ -1,3 +1,13 @@
1+2014-04-18 panacoran <panacoran@users.sourceforge.jp>
2+
3+ PriceDataUpdatorの営業日についてのループを簡略化する
4+
5+ * Protra.Lib/Update/PriceDataUpdator.cs (PriceDataUpdator.AdjustedDate): 削除。
6+ (PriceDataUpdator.ListOpenDates): 新規。開始日と終了日の間の営業日を列挙する。
7+ (PriceDataUpdator.NextDate): 削除。
8+ (PriceDataUpdator.UpdatePrice): ListOpenDatesを使う。
9+ * Protra.Lib/Update/YahooFinanceUpdator.cs (YahooFinanceUpdator.UpdatePrice): 同上。
10+
111 2014-04-14 panacoran <panacoran@users.sourceforge.jp>
212
313 #24665 k-db.comのサイト構成の変更に対応する
--- protra/trunk/Protra.Lib/Update/PriceDataUpdator.cs (revision 519)
+++ protra/trunk/Protra.Lib/Update/PriceDataUpdator.cs (revision 520)
@@ -295,48 +295,22 @@
295295 protected abstract string DownloadUrl(DateTime date);
296296
297297 /// <summary>
298- /// 処理を開始終了する日付を営業日に調節し、その間の営業日数を数える。
299- /// <param name="begin">処理を開始する日付</param>
300- /// <param name="end">処理を終了する日付</param>
298+ /// 開始日と終了日の間の営業日を列挙する。
299+ /// <param name="begin">開始日</param>
300+ /// <param name="end">終了日</param>
301301 /// </summary>
302- protected int AdjustedDate(ref DateTime begin, ref DateTime end)
302+ protected List<DateTime> ListOpenDates(DateTime begin, DateTime end)
303303 {
304- var days = 0;
305- var set = false;
306- // 市場が開いている日数を数える。
304+ var result = new List<DateTime>();
307305 for (var d = begin; d <= end; d = d.AddDays(1))
308306 {
309- if (!Calendar.IsMarketOpen(d))
310- continue;
311- if (!set)
312- {
313- begin = d; // 最初の市場が開いている日に設定する。
314- set = true;
315- }
316- days++;
307+ if (Calendar.IsMarketOpen(d))
308+ result.Add(d);
317309 }
318- // 最も最近の市場が開いている日に設定する。
319- for (; end >= begin; end = end.AddDays(-1))
320- {
321- if (Calendar.IsMarketOpen(end))
322- break;
323- }
324- return days;
310+ return result;
325311 }
326312
327313 /// <summary>
328- /// 日付を次の市場が開いている日に進める。
329- /// </summary>
330- protected DateTime NextDate(DateTime date)
331- {
332- do
333- {
334- date = date.AddDays(1);
335- } while (!Calendar.IsMarketOpen(date));
336- return date;
337- }
338-
339- /// <summary>
340314 /// 指定されたデータソースに対応する具象クラスのインスタンスを返す。
341315 /// </summary>
342316 public static PriceDataUpdator Create()
@@ -438,10 +412,11 @@
438412 // 今日のデータがまだ置かれていない。
439413 if (!IsDataAvailable(end))
440414 end = end.AddDays(-1);
441- _progress.NumDays = AdjustedDate(ref begin, ref end);
442- GetIndices(worker, begin, end);
415+ var dates = ListOpenDates(begin, end);
416+ _progress.NumDays = dates.Count;
417+ GetIndices(worker, dates[0], dates[dates.Count - 1]);
443418 _progress.Start();
444- for (var date = begin; date <= end; date = NextDate(date))
419+ foreach (var date in dates)
445420 {
446421 _progress.Show(worker, date);
447422 var dl = new DownloadUtil(DownloadUrl(date));
--- protra/trunk/Protra.Lib/Update/YahooFinanceUpdator.cs (revision 519)
+++ protra/trunk/Protra.Lib/Update/YahooFinanceUpdator.cs (revision 520)
@@ -69,10 +69,11 @@
6969 (threads[i] = new Thread(DoFetchPrice) {Name = "Fetch Thread " + i}).Start();
7070 try
7171 {
72- _progress.NumDays = AdjustedDate(ref begin, ref end);
72+ var dates = ListOpenDates(begin, end);
73+ _progress.NumDays = dates.Count;
7374 _progress.RecordsPerDay = GlobalEnv.BrandData.Count;
7475 _progress.Start();
75- for (var date = begin; date <= end; date = NextDate(date))
76+ foreach (var date in dates)
7677 {
7778 lock (_syncObject)
7879 {
Show on old repository browser