Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fix for issue #2: Error computing sunrise for a different timezone wh…

…en sunrise occurs on a different day. Added testdata for this case with Lat/Long of Novosibirsk, Russia and target timezone of GMT.
  • Loading branch information...
commit 68cf9b14004cfb45dd1b0ab4e2169d3081f1ffcb 1 parent dac4887
@mikereedell authored
View
40 src/main/java/com/luckycatlabs/sunrisesunset/calculator/SolarEventCalculator.java
@@ -98,6 +98,7 @@ public Calendar computeSunriseCalendar(Zenith solarZenith, Calendar date) {
public String computeSunsetTime(Zenith solarZenith, Calendar date) {
return getLocalTimeAsString(computeSolarEventTime(solarZenith, date, false));
}
+
/**
* Computes the sunset time for the given zenith at the given date.
*
@@ -174,8 +175,8 @@ private BigDecimal getMeanAnomaly(BigDecimal longitudeHour) {
*/
private BigDecimal getSunTrueLongitude(BigDecimal meanAnomaly) {
BigDecimal sinMeanAnomaly = new BigDecimal(Math.sin(convertDegreesToRadians(meanAnomaly).doubleValue()));
- BigDecimal sinDoubleMeanAnomaly = new BigDecimal(Math.sin(multiplyBy(convertDegreesToRadians(meanAnomaly),
- BigDecimal.valueOf(2)).doubleValue()));
+ BigDecimal sinDoubleMeanAnomaly = new BigDecimal(Math.sin(multiplyBy(convertDegreesToRadians(meanAnomaly), BigDecimal.valueOf(2))
+ .doubleValue()));
BigDecimal firstPart = meanAnomaly.add(multiplyBy(sinMeanAnomaly, new BigDecimal("1.916")));
BigDecimal secondPart = multiplyBy(sinDoubleMeanAnomaly, new BigDecimal("0.020")).add(new BigDecimal("282.634"));
@@ -295,9 +296,15 @@ private BigDecimal adjustForDST(BigDecimal localMeanTime, Calendar date) {
* <code>BigDecimal</code> representation of the local rise/set time.
* @return <code>String</code> representation of the local rise/set time in HH:MM format.
*/
- private String getLocalTimeAsString(BigDecimal localTime) {
- if (localTime == null)
+ private String getLocalTimeAsString(BigDecimal localTimeParam) {
+ if (localTimeParam == null) {
return "99:99";
+ }
+
+ BigDecimal localTime = localTimeParam;
+ if (localTime.compareTo(BigDecimal.ZERO) == -1) {
+ localTime = localTime.add(BigDecimal.valueOf(24.0D));
+ }
String[] timeComponents = localTime.toPlainString().split("\\.");
int hour = Integer.parseInt(timeComponents[0]);
@@ -307,6 +314,9 @@ private String getLocalTimeAsString(BigDecimal localTime) {
minutes = BigDecimal.ZERO;
hour += 1;
}
+ if (hour == 24) {
+ hour = 0;
+ }
String minuteString = minutes.intValue() < 10 ? "0" + minutes.toPlainString() : minutes.toPlainString();
String hourString = (hour < 10) ? "0" + String.valueOf(hour) : String.valueOf(hour);
@@ -316,13 +326,23 @@ private String getLocalTimeAsString(BigDecimal localTime) {
/**
* Returns the local rise/set time in the form HH:MM.
*
- * @param localTime
+ * @param localTimeParam
* <code>BigDecimal</code> representation of the local rise/set time.
* @return <code>Calendar</code> representation of the local time as a calendar, or null for none.
*/
- private Calendar getLocalTimeAsCalendar(BigDecimal localTime, Calendar date) {
- if (localTime == null)
+ protected Calendar getLocalTimeAsCalendar(BigDecimal localTimeParam, Calendar date) {
+ if (localTimeParam == null) {
return null;
+ }
+
+ // Create a clone of the input calendar so we get locale/timezone information.
+ Calendar resultTime = (Calendar) date.clone();
+
+ BigDecimal localTime = localTimeParam;
+ if (localTime.compareTo(BigDecimal.ZERO) == -1) {
+ localTime = localTime.add(BigDecimal.valueOf(24.0D));
+ resultTime.add(Calendar.HOUR_OF_DAY, -24);
+ }
String[] timeComponents = localTime.toPlainString().split("\\.");
int hour = Integer.parseInt(timeComponents[0]);
@@ -332,13 +352,15 @@ private Calendar getLocalTimeAsCalendar(BigDecimal localTime, Calendar date) {
minutes = BigDecimal.ZERO;
hour += 1;
}
+ if (hour == 24) {
+ hour = 0;
+ }
- // Create a clone of the input calendar so we get locale/timezone information.
- Calendar resultTime = (Calendar)date.clone();
// Set the local time
resultTime.set(Calendar.HOUR_OF_DAY, hour);
resultTime.set(Calendar.MINUTE, minutes.intValue());
resultTime.set(Calendar.SECOND, 0);
+ resultTime.setTimeZone(date.getTimeZone());
return resultTime;
}
View
4 src/main/ruby/solardatacollector.rb
@@ -19,10 +19,10 @@
# Takes a years worth of solar data and creates a CSV file from it.
# The data comes from http://www.cmpsolv.com/los/sunsetexp.html
-output = File.new("../testdata/solardata.csv", "w")
+output = File.new("../../../testdata/solardata.csv", "w")
month = 0
-File.open("../testdata/solardata.txt", "r").grep(/(\d)+\s(([0-1][0-9]|[2][0-3]):([0-5][0-9])(\s)?)+/).each do |line|
+File.open("../../../testdata/solardata.txt", "r").grep(/(\d)+\s(([0-1][0-9]|[2][0-3]):([0-5][0-9])(\s)?)+/).each do |line|
line.chop!()
line.gsub!(/\s(DAY)/, '99:99')
line.gsub!(/\s{2}/, ' ')
View
22 src/test/java/com/luckycatlabs/sunrisesunset/SunriseSunsetCalculatorTest.java
@@ -16,9 +16,14 @@
package com.luckycatlabs.sunrisesunset;
+import static org.junit.Assert.assertEquals;
+
+import java.util.Calendar;
+
import org.junit.Before;
import org.junit.Test;
+import com.luckycatlabs.sunrisesunset.dto.Location;
import com.luckycatlabs.sunrisesunset.util.BaseTestCase;
/**
@@ -74,4 +79,21 @@ public void testComputeOfficialSunrise() {
public void testComputeOfficialSunset() {
assertTimeEquals("18:00", calc.getOfficialSunsetForDate(eventDate), eventDate.getTime().toString());
}
+
+ @Test
+ public void testSpecificDateLocationAndTimezone() {
+ Location loc = new Location("55.03", "82.91");
+ SunriseSunsetCalculator calculator = new SunriseSunsetCalculator(loc, "GMT");
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(2012, 4, 7);
+
+ String officialSunriseForDate = calculator.getOfficialSunriseForDate(calendar);
+ assertEquals("22:35", officialSunriseForDate);
+
+ Calendar officialSunriseCalendarForDate = calculator.getOfficialSunriseCalendarForDate(calendar);
+ assertEquals(22, officialSunriseCalendarForDate.get(Calendar.HOUR_OF_DAY));
+ assertEquals(35, officialSunriseCalendarForDate.get(Calendar.MINUTE));
+ assertEquals(6, officialSunriseCalendarForDate.get(Calendar.DAY_OF_MONTH));
+ }
}
View
28 src/test/java/com/luckycatlabs/sunrisesunset/calculator/SolarEventCalculatorTest.java
@@ -18,6 +18,9 @@
import static org.junit.Assert.assertEquals;
+import java.math.BigDecimal;
+import java.util.Calendar;
+
import org.junit.Before;
import org.junit.Test;
@@ -37,12 +40,33 @@ public void setupCalculator() {
@Test
public void testComputeSunriseTime() {
String localSunriseTime = "07:05";
- assertEquals(localSunriseTime, calc.computeSunriseTime(Zenith.CIVIL, this.eventDate));
+ assertEquals(localSunriseTime, calc.computeSunriseTime(Zenith.CIVIL, eventDate));
}
@Test
public void testComputeSunsetTime() {
String localSunsetTime = "18:28";
- assertEquals(localSunsetTime, calc.computeSunsetTime(Zenith.CIVIL, this.eventDate));
+ assertEquals(localSunsetTime, calc.computeSunsetTime(Zenith.CIVIL, eventDate));
+ }
+
+ @Test
+ public void testGetLocalTimeAsCalendar() {
+ Calendar localTime = calc.getLocalTimeAsCalendar(BigDecimal.valueOf(15.5D), Calendar.getInstance());
+ assertEquals(15, localTime.get(Calendar.HOUR_OF_DAY));
+ assertEquals(30, localTime.get(Calendar.MINUTE));
+ }
+
+ @Test
+ public void testGetLocalTimeAsCalendarForZero() {
+ Calendar localTime = calc.getLocalTimeAsCalendar(BigDecimal.valueOf(0.0D), Calendar.getInstance());
+ assertEquals(0, localTime.get(Calendar.HOUR_OF_DAY));
+ assertEquals(0, localTime.get(Calendar.MINUTE));
+ }
+
+ @Test
+ public void testGetLocalTimeAsCalendarForNegative() {
+ Calendar localTime = calc.getLocalTimeAsCalendar(BigDecimal.valueOf(-10.0D), Calendar.getInstance());
+ assertEquals(14, localTime.get(Calendar.HOUR_OF_DAY));
+ assertEquals(0, localTime.get(Calendar.MINUTE));
}
}
View
3  src/test/java/com/luckycatlabs/sunrisesunset/util/BaseTestCase.java
@@ -73,6 +73,9 @@ protected String getMessage(Object expected, Object actual) {
private int getMinutes(String timeString) {
String[] timeParts = timeString.split("\\:");
+ if (timeParts[0].equals("00")) {
+ timeParts[0] = "24";
+ }
return (60 * Integer.valueOf(timeParts[0])) + Integer.valueOf(timeParts[1]);
}
}
View
366 testdata/55_03N-82_91E#GMT.txt
@@ -0,0 +1,366 @@
+1/01/2012,00:37,01:21,02:09,02:54,10:10,10:55,11:43,12:27
+1/02/2012,00:37,01:21,02:08,02:53,10:11,10:56,11:44,12:28
+1/03/2012,00:37,01:21,02:08,02:53,10:13,10:58,11:45,12:29
+1/04/2012,00:37,01:21,02:08,02:53,10:14,10:59,11:46,12:30
+1/05/2012,00:37,01:21,02:08,02:52,10:15,11:00,11:47,12:31
+1/06/2012,00:36,01:20,02:07,02:52,10:17,11:01,11:48,12:32
+1/07/2012,00:36,01:20,02:07,02:51,10:18,11:03,11:49,12:33
+1/08/2012,00:36,01:20,02:07,02:51,10:20,11:04,11:51,12:35
+1/09/2012,00:35,01:19,02:06,02:50,10:21,11:05,11:52,12:36
+1/10/2012,00:35,01:19,02:06,02:50,10:23,11:07,11:53,12:37
+1/11/2012,00:35,01:18,02:05,02:49,10:24,11:08,11:55,12:38
+1/12/2012,00:34,01:18,02:04,02:48,10:26,11:10,11:56,12:40
+1/13/2012,00:34,01:17,02:04,02:47,10:28,11:11,11:57,12:41
+1/14/2012,00:33,01:17,02:03,02:46,10:29,11:13,11:59,12:42
+1/15/2012,00:32,01:16,02:02,02:45,10:31,11:14,12:00,12:44
+1/16/2012,00:32,01:15,02:01,02:44,10:33,11:16,12:02,12:45
+1/17/2012,00:31,01:14,02:00,02:43,10:35,11:17,12:03,12:47
+1/18/2012,00:30,01:13,01:59,02:42,10:37,11:19,12:05,12:48
+1/19/2012,00:29,01:13,01:58,02:41,10:38,11:21,12:06,12:49
+1/20/2012,00:28,01:12,01:57,02:39,10:40,11:22,12:08,12:51
+1/21/2012,00:27,01:11,01:56,02:38,10:42,11:24,12:09,12:53
+1/22/2012,00:26,01:10,01:55,02:37,10:44,11:26,12:11,12:54
+1/23/2012,00:25,01:08,01:53,02:35,10:46,11:28,12:13,12:56
+1/24/2012,00:24,01:07,01:52,02:34,10:48,11:29,12:14,12:57
+1/25/2012,00:23,01:06,01:51,02:32,10:50,11:31,12:16,12:59
+1/26/2012,00:22,01:05,01:50,02:31,10:52,11:33,12:18,13:00
+1/27/2012,00:21,01:04,01:48,02:29,10:54,11:35,12:19,13:02
+1/28/2012,00:20,01:02,01:47,02:27,10:56,11:37,12:21,13:04
+1/29/2012,00:18,01:01,01:45,02:26,10:58,11:39,12:23,13:05
+1/30/2012,00:17,01:00,01:44,02:24,11:00,11:41,12:25,13:07
+1/31/2012,00:16,00:58,01:42,02:22,11:02,11:42,12:26,13:09
+2/01/2012,00:14,00:57,01:41,02:21,11:04,11:44,12:28,13:11
+2/02/2012,00:13,00:55,01:39,02:19,11:06,11:46,12:30,13:12
+2/03/2012,00:11,00:54,01:37,02:17,11:09,11:48,12:32,13:14
+2/04/2012,00:10,00:52,01:36,02:15,11:11,11:50,12:34,13:16
+2/05/2012,00:08,00:50,01:34,02:13,11:13,11:52,12:35,13:18
+2/06/2012,00:06,00:49,01:32,02:11,11:15,11:54,12:37,13:19
+2/07/2012,00:05,00:47,01:30,02:09,11:17,11:56,12:39,13:21
+2/08/2012,00:03,00:45,01:28,02:07,11:19,11:58,12:41,13:23
+2/09/2012,00:02,00:43,01:26,02:05,11:21,12:00,12:43,13:25
+2/10/2012,00:01,00:42,01:25,02:03,11:23,12:02,12:45,13:27
+2/11/2012,23:59,00:40,01:23,02:01,11:25,12:04,12:47,13:29
+2/12/2012,23:56,00:38,01:21,01:59,11:27,12:06,12:48,13:30
+2/13/2012,23:54,00:36,01:19,01:57,11:30,12:08,12:50,13:32
+2/14/2012,23:52,00:34,01:17,01:55,11:32,12:10,12:52,13:34
+2/15/2012,23:50,00:32,01:15,01:52,11:34,12:12,12:54,13:36
+2/16/2012,23:48,00:30,01:13,01:50,11:36,12:14,12:56,13:38
+2/17/2012,23:46,00:28,01:10,01:48,11:38,12:16,12:58,13:40
+2/18/2012,23:44,00:26,01:08,01:46,11:40,12:18,13:00,13:42
+2/19/2012,23:42,00:24,01:06,01:44,11:42,12:20,13:02,13:44
+2/20/2012,23:40,00:22,01:04,01:41,11:44,12:22,13:04,13:46
+2/21/2012,23:38,00:20,01:02,01:39,11:46,12:23,13:06,13:48
+2/22/2012,23:36,00:17,01:00,01:37,11:48,12:25,13:08,13:50
+2/23/2012,23:33,00:15,00:57,01:34,11:51,12:27,13:09,13:52
+2/24/2012,23:31,00:13,00:55,01:32,11:53,12:29,13:11,13:54
+2/25/2012,23:29,00:11,00:53,01:30,11:55,12:31,13:13,13:56
+2/26/2012,23:26,00:09,00:51,01:27,11:57,12:33,13:15,13:58
+2/27/2012,23:24,00:06,00:48,01:25,11:59,12:35,13:17,14:00
+2/28/2012,23:22,00:04,00:46,01:22,12:01,12:37,13:19,14:02
+2/29/2012,23:19,00:02,00:44,01:20,12:03,12:39,13:21,14:04
+3/01/2012,23:17,00:00,00:41,01:18,12:05,12:41,13:23,14:06
+3/02/2012,23:14,23:57,00:39,01:15,12:07,12:43,13:25,14:08
+3/03/2012,23:12,23:54,00:36,01:13,12:09,12:45,13:27,14:10
+3/04/2012,23:09,23:52,00:34,01:10,12:11,12:47,13:29,14:12
+3/05/2012,23:07,23:50,00:32,01:08,12:13,12:49,13:31,14:14
+3/06/2012,23:04,23:47,00:29,01:05,12:15,12:51,13:33,14:16
+3/07/2012,23:02,23:45,00:27,01:03,12:17,12:53,13:35,14:18
+3/08/2012,22:59,23:42,00:24,01:00,12:19,12:55,13:37,14:20
+3/09/2012,22:56,23:40,00:22,00:58,12:21,12:57,13:39,14:23
+3/10/2012,22:54,23:37,00:19,00:55,12:23,12:59,13:41,14:25
+3/11/2012,22:51,23:34,00:17,00:53,12:25,13:01,13:43,14:27
+3/12/2012,22:48,23:32,00:14,00:50,12:27,13:03,13:45,14:29
+3/13/2012,22:45,23:29,00:12,00:48,12:29,13:05,13:47,14:31
+3/14/2012,22:43,23:27,00:09,00:45,12:31,13:07,13:50,14:34
+3/15/2012,22:40,23:24,00:07,00:43,12:33,13:09,13:52,14:36
+3/16/2012,22:37,23:21,00:04,00:40,12:35,13:11,13:54,14:38
+3/17/2012,22:34,23:19,00:01,00:38,12:37,13:13,13:56,14:41
+3/18/2012,22:31,23:16,00:00,00:35,12:39,13:15,13:58,14:43
+3/19/2012,22:28,23:13,23:56,00:32,12:41,13:17,14:00,14:45
+3/20/2012,22:25,23:11,23:54,00:30,12:43,13:19,14:02,14:48
+3/21/2012,22:22,23:08,23:51,00:27,12:45,13:21,14:04,14:50
+3/22/2012,22:19,23:05,23:48,00:25,12:47,13:23,14:06,14:53
+3/23/2012,22:16,23:02,23:46,00:22,12:49,13:25,14:09,14:55
+3/24/2012,22:13,23:00,23:43,00:20,12:51,13:27,14:11,14:58
+3/25/2012,22:10,22:57,23:41,00:17,12:53,13:29,14:13,15:00
+3/26/2012,22:07,22:54,23:38,00:14,12:55,13:31,14:15,15:03
+3/27/2012,22:04,22:51,23:35,00:12,12:56,13:33,14:17,15:05
+3/28/2012,22:00,22:48,23:33,00:09,12:58,13:35,14:20,15:08
+3/29/2012,21:57,22:45,23:30,00:07,13:00,13:37,14:22,15:10
+3/30/2012,21:54,22:43,23:27,00:04,13:02,13:39,14:24,15:13
+3/31/2012,21:51,22:40,23:25,00:02,13:04,13:41,14:26,15:16
+4/01/2012,21:47,22:37,23:22,23:59,13:06,13:43,14:29,15:19
+4/02/2012,21:44,22:34,23:19,23:57,13:08,13:45,14:31,15:21
+4/03/2012,21:41,22:31,23:17,23:54,13:10,13:47,14:33,15:24
+4/04/2012,21:37,22:28,23:14,23:52,13:12,13:50,14:36,15:27
+4/05/2012,21:34,22:25,23:11,23:49,13:14,13:52,14:38,15:30
+4/06/2012,21:30,22:22,23:09,23:47,13:16,13:54,14:40,15:33
+4/07/2012,21:27,22:19,23:06,23:44,13:18,13:56,14:43,15:36
+4/08/2012,21:23,22:16,23:04,23:42,13:20,13:58,14:45,15:39
+4/09/2012,21:19,22:13,23:01,23:39,13:22,14:00,14:48,15:42
+4/10/2012,21:16,22:10,22:58,23:37,13:24,14:02,14:50,15:45
+4/11/2012,21:12,22:08,22:56,23:34,13:26,14:04,14:52,15:48
+4/12/2012,21:08,22:05,22:53,23:32,13:28,14:06,14:55,15:52
+4/13/2012,21:04,22:02,22:50,23:29,13:30,14:08,14:57,15:55
+4/14/2012,21:01,21:58,22:48,23:27,13:32,14:11,15:00,15:58
+4/15/2012,20:57,21:55,22:45,23:24,13:34,14:13,15:03,16:02
+4/16/2012,20:53,21:52,22:42,23:22,13:35,14:15,15:05,16:05
+4/17/2012,20:49,21:49,22:40,23:19,13:37,14:17,15:08,16:09
+4/18/2012,20:45,21:46,22:37,23:17,13:39,14:19,15:10,16:13
+4/19/2012,20:40,21:43,22:35,23:15,13:41,14:21,15:13,16:17
+4/20/2012,20:36,21:40,22:32,23:12,13:43,14:24,15:16,16:20
+4/21/2012,20:32,21:37,22:29,23:10,13:45,14:26,15:18,16:24
+4/22/2012,20:27,21:34,22:27,23:08,13:47,14:28,15:21,16:29
+4/23/2012,20:23,21:31,22:24,23:05,13:49,14:30,15:24,16:33
+4/24/2012,20:18,21:28,22:22,23:03,13:51,14:32,15:27,16:37
+4/25/2012,20:13,21:25,22:19,23:01,13:53,14:35,15:29,16:42
+4/26/2012,20:08,21:22,22:17,22:58,13:55,14:37,15:32,16:47
+4/27/2012,20:03,21:18,22:14,22:56,13:57,14:39,15:35,16:51
+4/28/2012,19:58,21:15,22:12,22:54,13:59,14:41,15:38,16:57
+4/29/2012,19:52,21:12,22:09,22:52,14:01,14:43,15:41,17:02
+4/30/2012,19:46,21:09,22:07,22:49,14:03,14:46,15:44,17:08
+5/01/2012,19:40,21:06,22:04,22:47,14:05,14:48,15:47,17:14
+5/02/2012,19:33,21:03,22:02,22:45,14:06,14:50,15:49,17:21
+5/03/2012,19:26,20:59,21:59,22:43,14:08,14:52,15:52,17:29
+5/04/2012,19:18,20:56,21:57,22:41,14:10,14:54,15:56,17:37
+5/05/2012,19:08,20:53,21:55,22:39,14:12,14:57,15:59,17:48
+5/06/2012,18:56,20:50,21:52,22:37,14:14,14:59,16:02,18:02
+5/07/2012,18:33,20:47,21:50,22:35,14:16,15:01,16:05,99:99
+5/08/2012,99:99,20:43,21:47,22:33,14:18,15:03,16:08,99:99
+5/09/2012,99:99,20:40,21:45,22:31,14:20,15:06,16:11,99:99
+5/10/2012,99:99,20:37,21:43,22:29,14:22,15:08,16:14,99:99
+5/11/2012,99:99,20:34,21:41,22:27,14:23,15:10,16:17,99:99
+5/12/2012,99:99,20:30,21:38,22:25,14:25,15:12,16:21,99:99
+5/13/2012,99:99,20:27,21:36,22:23,14:27,15:14,16:24,99:99
+5/14/2012,99:99,20:24,21:34,22:22,14:29,15:16,16:27,99:99
+5/15/2012,99:99,20:20,21:32,22:20,14:31,15:19,16:31,99:99
+5/16/2012,99:99,20:17,21:30,22:18,14:32,15:21,16:34,99:99
+5/17/2012,99:99,20:14,21:28,22:16,14:34,15:23,16:38,99:99
+5/18/2012,99:99,20:10,21:26,22:15,14:36,15:25,16:41,99:99
+5/19/2012,99:99,20:07,21:24,22:13,14:37,15:27,16:44,99:99
+5/20/2012,99:99,20:04,21:22,22:12,14:39,15:29,16:48,99:99
+5/21/2012,99:99,20:00,21:20,22:10,14:41,15:31,16:52,99:99
+5/22/2012,99:99,19:57,21:18,22:09,14:42,15:33,16:55,99:99
+5/23/2012,99:99,19:53,21:16,22:07,14:44,15:35,16:59,99:99
+5/24/2012,99:99,19:50,21:14,22:06,14:45,15:37,17:03,99:99
+5/25/2012,99:99,19:46,21:13,22:04,14:47,15:39,17:06,99:99
+5/26/2012,99:99,19:43,21:11,22:03,14:49,15:41,17:10,99:99
+5/27/2012,99:99,19:39,21:09,22:02,14:50,15:43,17:14,99:99
+5/28/2012,99:99,19:35,21:08,22:01,14:51,15:45,17:18,99:99
+5/29/2012,99:99,19:32,21:06,21:59,14:53,15:46,17:22,99:99
+5/30/2012,99:99,19:28,21:05,21:58,14:54,15:48,17:26,99:99
+5/31/2012,99:99,19:24,21:03,21:57,14:55,15:50,17:30,99:99
+6/01/2012,99:99,19:20,21:02,21:56,14:57,15:51,17:35,99:99
+6/02/2012,99:99,19:16,21:01,21:55,14:58,15:53,17:39,99:99
+6/03/2012,99:99,19:12,20:59,21:54,14:59,15:54,17:44,99:99
+6/04/2012,99:99,19:07,20:58,21:54,15:00,15:56,17:49,99:99
+6/05/2012,99:99,19:02,20:57,21:53,15:01,15:57,17:54,99:99
+6/06/2012,99:99,18:57,20:56,21:52,15:02,15:59,18:00,99:99
+6/07/2012,99:99,18:51,20:55,21:51,15:03,16:00,18:07,99:99
+6/08/2012,99:99,18:44,20:54,21:51,15:04,16:01,18:16,99:99
+6/09/2012,99:99,99:99,20:53,21:50,15:05,16:02,99:99,99:99
+6/10/2012,99:99,99:99,20:53,21:50,15:06,16:03,99:99,99:99
+6/11/2012,99:99,99:99,20:52,21:49,15:07,16:04,99:99,99:99
+6/12/2012,99:99,99:99,20:52,21:49,15:08,16:05,99:99,99:99
+6/13/2012,99:99,99:99,20:51,21:49,15:08,16:06,99:99,99:99
+6/14/2012,99:99,99:99,20:51,21:49,15:09,16:07,99:99,99:99
+6/15/2012,99:99,99:99,20:50,21:48,15:10,16:08,99:99,99:99
+6/16/2012,99:99,99:99,20:50,21:48,15:10,16:08,99:99,99:99
+6/17/2012,99:99,99:99,20:50,21:48,15:11,16:09,99:99,99:99
+6/18/2012,99:99,99:99,20:50,21:48,15:11,16:09,99:99,99:99
+6/19/2012,99:99,99:99,20:50,21:48,15:11,16:10,99:99,99:99
+6/20/2012,99:99,99:99,20:50,21:49,15:11,16:10,99:99,99:99
+6/21/2012,99:99,99:99,20:50,21:49,15:12,16:10,99:99,99:99
+6/22/2012,99:99,99:99,20:51,21:49,15:12,16:10,99:99,99:99
+6/23/2012,99:99,99:99,20:51,21:49,15:12,16:10,99:99,99:99
+6/24/2012,99:99,99:99,20:51,21:50,15:12,16:10,99:99,99:99
+6/25/2012,99:99,99:99,20:52,21:50,15:12,16:10,99:99,99:99
+6/26/2012,99:99,99:99,20:53,21:51,15:12,16:10,99:99,99:99
+6/27/2012,99:99,99:99,20:53,21:51,15:12,16:09,99:99,99:99
+6/28/2012,99:99,99:99,20:54,21:52,15:11,16:09,99:99,99:99
+6/29/2012,99:99,99:99,20:55,21:52,15:11,16:08,99:99,99:99
+6/30/2012,99:99,99:99,20:56,21:53,15:11,16:08,99:99,99:99
+7/01/2012,99:99,99:99,20:57,21:54,15:10,16:07,99:99,99:99
+7/02/2012,99:99,99:99,20:58,21:55,15:10,16:07,18:31,99:99
+7/03/2012,99:99,18:45,20:59,21:56,15:09,16:06,18:15,99:99
+7/04/2012,99:99,18:54,21:00,21:57,15:09,16:05,18:08,99:99
+7/05/2012,99:99,19:01,21:02,21:58,15:08,16:04,18:02,99:99
+7/06/2012,99:99,19:06,21:03,21:59,15:07,16:03,17:57,99:99
+7/07/2012,99:99,19:12,21:04,22:00,15:06,16:02,17:53,99:99
+7/08/2012,99:99,19:17,21:06,22:01,15:06,16:01,17:48,99:99
+7/09/2012,99:99,19:21,21:07,22:02,15:05,15:59,17:44,99:99
+7/10/2012,99:99,19:26,21:09,22:03,15:04,15:58,17:40,99:99
+7/11/2012,99:99,19:30,21:10,22:05,15:03,15:57,17:36,99:99
+7/12/2012,99:99,19:34,21:12,22:06,15:02,15:55,17:32,99:99
+7/13/2012,99:99,19:38,21:14,22:07,15:00,15:54,17:28,99:99
+7/14/2012,99:99,19:42,21:15,22:09,14:59,15:52,17:25,99:99
+7/15/2012,99:99,19:46,21:17,22:10,14:58,15:51,17:21,99:99
+7/16/2012,99:99,19:50,21:19,22:11,14:57,15:49,17:17,99:99
+7/17/2012,99:99,19:54,21:21,22:13,14:55,15:47,17:14,99:99
+7/18/2012,99:99,19:57,21:23,22:14,14:54,15:45,17:10,99:99
+7/19/2012,99:99,20:01,21:25,22:16,14:53,15:44,17:07,99:99
+7/20/2012,99:99,20:05,21:27,22:17,14:51,15:42,17:03,99:99
+7/21/2012,99:99,20:08,21:29,22:19,14:50,15:40,17:00,99:99
+7/22/2012,99:99,20:12,21:31,22:21,14:48,15:38,16:56,99:99
+7/23/2012,99:99,20:15,21:33,22:22,14:47,15:36,16:53,99:99
+7/24/2012,99:99,20:19,21:35,22:24,14:45,15:34,16:49,99:99
+7/25/2012,99:99,20:22,21:37,22:26,14:43,15:32,16:46,99:99
+7/26/2012,99:99,20:25,21:39,22:27,14:42,15:30,16:43,99:99
+7/27/2012,99:99,20:29,21:41,22:29,14:40,15:28,16:39,99:99
+7/28/2012,99:99,20:32,21:43,22:31,14:38,15:26,16:36,99:99
+7/29/2012,99:99,20:35,21:45,22:32,14:36,15:23,16:33,99:99
+7/30/2012,99:99,20:38,21:47,22:34,14:34,15:21,16:29,99:99
+7/31/2012,99:99,20:42,21:49,22:36,14:33,15:19,16:26,99:99
+8/01/2012,99:99,20:45,21:51,22:38,14:31,15:17,16:23,99:99
+8/02/2012,99:99,20:48,21:54,22:39,14:29,15:14,16:20,99:99
+8/03/2012,99:99,20:51,21:56,22:41,14:27,15:12,16:16,99:99
+8/04/2012,99:99,20:54,21:58,22:43,14:25,15:10,16:13,99:99
+8/05/2012,18:54,20:57,22:00,22:45,14:23,15:07,16:10,18:05
+8/06/2012,19:10,21:00,22:02,22:47,14:21,15:05,16:07,17:53
+8/07/2012,19:20,21:03,22:04,22:49,14:19,15:03,16:03,17:43
+8/08/2012,19:29,21:06,22:06,22:50,14:16,15:00,16:00,17:35
+8/09/2012,19:37,21:09,22:09,22:52,14:14,14:58,15:57,17:27
+8/10/2012,19:44,21:12,22:11,22:54,14:12,14:55,15:54,17:20
+8/11/2012,19:50,21:15,22:13,22:56,14:10,14:53,15:51,17:14
+8/12/2012,19:56,21:18,22:15,22:58,14:08,14:50,15:47,17:08
+8/13/2012,20:01,21:20,22:17,23:00,14:06,14:48,15:44,17:03
+8/14/2012,20:06,21:23,22:19,23:02,14:03,14:45,15:41,16:57
+8/15/2012,20:11,21:26,22:22,23:03,14:01,14:43,15:38,16:52
+8/16/2012,20:16,21:29,22:24,23:05,13:59,14:40,15:35,16:47
+8/17/2012,20:20,21:31,22:26,23:07,13:56,14:38,15:32,16:42
+8/18/2012,20:25,21:34,22:28,23:09,13:54,14:35,15:29,16:37
+8/19/2012,20:29,21:37,22:30,23:11,13:52,14:32,15:25,16:33
+8/20/2012,20:33,21:39,22:32,23:13,13:49,14:30,15:22,16:28
+8/21/2012,20:37,21:42,22:34,23:15,13:47,14:27,15:19,16:24
+8/22/2012,20:41,21:45,22:36,23:17,13:45,14:25,15:16,16:20
+8/23/2012,20:44,21:47,22:38,23:18,13:42,14:22,15:13,16:15
+8/24/2012,20:48,21:50,22:41,23:20,13:40,14:19,15:10,16:11
+8/25/2012,20:52,21:52,22:43,23:22,13:37,14:17,15:07,16:07
+8/26/2012,20:55,21:55,22:45,23:24,13:35,14:14,15:04,16:03
+8/27/2012,20:58,21:57,22:47,23:26,13:32,14:12,15:01,15:59
+8/28/2012,21:02,22:00,22:49,23:28,13:30,14:09,14:58,15:55
+8/29/2012,21:05,22:02,22:51,23:30,13:28,14:06,14:55,15:51
+8/30/2012,21:08,22:04,22:53,23:31,13:25,14:04,14:52,15:48
+8/31/2012,21:11,22:07,22:55,23:33,13:23,14:01,14:49,15:44
+9/01/2012,21:14,22:09,22:57,23:35,13:20,13:58,14:46,15:40
+9/02/2012,21:17,22:12,22:59,23:37,13:18,13:56,14:43,15:37
+9/03/2012,21:20,22:14,23:01,23:39,13:15,13:53,14:40,15:33
+9/04/2012,21:23,22:16,23:03,23:41,13:13,13:50,14:37,15:29
+9/05/2012,21:26,22:18,23:05,23:43,13:10,13:48,14:34,15:26
+9/06/2012,21:29,22:21,23:07,23:45,13:07,13:45,14:31,15:22
+9/07/2012,21:32,22:23,23:09,23:46,13:05,13:42,14:28,15:19
+9/08/2012,21:35,22:25,23:11,23:48,13:02,13:40,14:25,15:16
+9/09/2012,21:37,22:27,23:13,23:50,13:00,13:37,14:22,15:12
+9/10/2012,21:40,22:30,23:15,23:52,12:57,13:34,14:19,15:09
+9/11/2012,21:43,22:32,23:17,23:54,12:55,13:32,14:16,15:05
+9/12/2012,21:45,22:34,23:19,23:56,12:52,13:29,14:14,15:02
+9/13/2012,21:48,22:36,23:21,23:58,12:49,13:26,14:11,14:59
+9/14/2012,21:50,22:38,23:23,23:59,12:47,13:24,14:08,14:56
+9/15/2012,21:53,22:41,23:25,00:01,12:44,13:21,14:05,14:53
+9/16/2012,21:55,22:43,23:27,00:03,12:42,13:18,14:02,14:49
+9/17/2012,21:58,22:45,23:29,00:05,12:39,13:16,13:59,14:46
+9/18/2012,22:00,22:47,23:30,00:07,12:37,13:13,13:57,14:43
+9/19/2012,22:03,22:49,23:32,00:09,12:34,13:10,13:54,14:40
+9/20/2012,22:05,22:51,23:34,00:11,12:31,13:08,13:51,14:37
+9/21/2012,22:07,22:53,23:36,00:13,12:29,13:05,13:48,14:34
+9/22/2012,22:10,22:55,23:38,00:14,12:26,13:02,13:46,14:31
+9/23/2012,22:12,22:57,23:40,00:16,12:24,13:00,13:43,14:28
+9/24/2012,22:14,22:59,23:42,00:18,12:21,12:57,13:40,14:25
+9/25/2012,22:16,23:01,23:44,00:20,12:19,12:55,13:37,14:22
+9/26/2012,22:19,23:03,23:46,00:22,12:16,12:52,13:35,14:19
+9/27/2012,22:21,23:05,23:48,00:24,12:13,12:50,13:32,14:16
+9/28/2012,22:23,23:07,23:50,00:26,12:11,12:47,13:29,14:13
+9/29/2012,22:25,23:09,23:52,00:28,12:08,12:44,13:27,14:11
+9/30/2012,22:27,23:11,23:53,00:30,12:06,12:42,13:24,14:08
+10/01/2012,22:29,23:13,23:55,00:31,12:03,12:39,13:22,14:05
+10/02/2012,22:32,23:15,23:57,00:33,12:01,12:37,13:19,14:02
+10/03/2012,22:34,23:17,23:59,00:35,11:58,12:34,13:16,14:00
+10/04/2012,22:36,23:19,00:01,00:37,11:56,12:32,13:14,13:57
+10/05/2012,22:38,23:21,00:03,00:39,11:53,12:29,13:11,13:54
+10/06/2012,22:40,23:23,00:05,00:41,11:51,12:27,13:09,13:52
+10/07/2012,22:42,23:25,00:07,00:43,11:48,12:24,13:06,13:49
+10/08/2012,22:44,23:27,00:09,00:45,11:46,12:22,13:04,13:46
+10/09/2012,22:46,23:29,00:11,00:47,11:43,12:19,13:01,13:44
+10/10/2012,22:48,23:30,00:12,00:49,11:41,12:17,12:59,13:41
+10/11/2012,22:50,23:32,00:14,00:51,11:38,12:15,12:57,13:39
+10/12/2012,22:52,23:34,00:16,00:53,11:36,12:12,12:54,13:36
+10/13/2012,22:54,23:36,00:18,00:55,11:33,12:10,12:52,13:34
+10/14/2012,22:56,23:38,00:20,00:57,11:31,12:07,12:49,13:32
+10/15/2012,22:58,23:40,00:22,00:59,11:28,12:05,12:47,13:29
+10/16/2012,23:00,23:42,00:24,01:01,11:26,12:03,12:45,13:27
+10/17/2012,23:02,23:44,00:26,01:03,11:24,12:01,12:43,13:25
+10/18/2012,23:04,23:46,00:28,01:05,11:21,11:58,12:40,13:22
+10/19/2012,23:05,23:47,00:30,01:07,11:19,11:56,12:38,13:20
+10/20/2012,23:07,23:49,00:31,01:09,11:17,11:54,12:36,13:18
+10/21/2012,23:09,23:51,00:33,01:11,11:14,11:52,12:34,13:16
+10/22/2012,23:11,23:53,00:35,01:13,11:12,11:49,12:32,13:13
+10/23/2012,23:13,23:55,00:37,01:15,11:10,11:47,12:29,13:11
+10/24/2012,23:15,23:57,00:39,01:17,11:07,11:45,12:27,13:09
+10/25/2012,23:17,23:59,00:41,01:19,11:05,11:43,12:25,13:07
+10/26/2012,23:18,00:00,00:43,01:21,11:03,11:41,12:23,13:05
+10/27/2012,23:20,00:02,00:45,01:23,11:01,11:39,12:21,13:03
+10/28/2012,23:22,00:04,00:47,01:25,10:59,11:37,12:19,13:01
+10/29/2012,23:24,00:06,00:49,01:27,10:56,11:35,12:17,12:59
+10/30/2012,23:26,00:08,00:50,01:29,10:54,11:33,12:15,12:57
+10/31/2012,23:27,00:09,00:52,01:31,10:52,11:31,12:14,12:56
+11/01/2012,23:29,00:11,00:54,01:33,10:50,11:29,12:12,12:54
+11/02/2012,23:31,00:13,00:56,01:35,10:48,11:27,12:10,12:52
+11/03/2012,23:33,00:15,00:58,01:37,10:46,11:25,12:08,12:50
+11/04/2012,23:35,00:17,01:00,01:39,10:44,11:23,12:06,12:49
+11/05/2012,23:36,00:18,01:02,01:41,10:42,11:21,12:05,12:47
+11/06/2012,23:38,00:20,01:04,01:43,10:40,11:20,12:03,12:45
+11/07/2012,23:40,00:22,01:06,01:45,10:38,11:18,12:01,12:44
+11/08/2012,23:41,00:24,01:07,01:47,10:36,11:16,12:00,12:42
+11/09/2012,23:43,00:25,01:09,01:49,10:34,11:14,11:58,12:41
+11/10/2012,23:45,00:27,01:11,01:51,10:33,11:13,11:57,12:39
+11/11/2012,23:46,00:29,01:13,01:53,10:31,11:11,11:55,12:38
+11/12/2012,23:48,00:31,01:15,01:55,10:29,11:10,11:54,12:36
+11/13/2012,23:50,00:32,01:17,01:57,10:27,11:08,11:52,12:35
+11/14/2012,23:51,00:34,01:18,01:59,10:26,11:07,11:51,12:34
+11/15/2012,23:53,00:36,01:20,02:01,10:24,11:05,11:50,12:33
+11/16/2012,23:55,00:37,01:22,02:03,10:23,11:04,11:48,12:31
+11/17/2012,23:56,00:39,01:24,02:05,10:21,11:02,11:47,12:30
+11/18/2012,23:58,00:41,01:25,02:07,10:19,11:01,11:46,12:29
+11/19/2012,23:59,00:42,01:27,02:09,10:18,11:00,11:45,12:28
+11/20/2012,00:01,00:44,01:29,02:11,10:17,10:59,11:44,12:27
+11/21/2012,00:02,00:45,01:31,02:13,10:15,10:57,11:43,12:26
+11/22/2012,00:04,00:47,01:32,02:15,10:14,10:56,11:42,12:25
+11/23/2012,00:05,00:48,01:34,02:16,10:13,10:55,11:41,12:24
+11/24/2012,00:07,00:50,01:36,02:18,10:11,10:54,11:40,12:23
+11/25/2012,00:08,00:51,01:37,02:20,10:10,10:53,11:39,12:23
+11/26/2012,00:09,00:53,01:39,02:22,10:09,10:52,11:38,12:22
+11/27/2012,00:11,00:54,01:40,02:23,10:08,10:51,11:38,12:21
+11/28/2012,00:12,00:56,01:42,02:25,10:07,10:51,11:37,12:20
+11/29/2012,00:13,00:57,01:43,02:27,10:06,10:50,11:36,12:20
+11/30/2012,00:15,00:58,01:45,02:28,10:05,10:49,11:36,12:19
+12/01/2012,00:16,01:00,01:46,02:30,10:05,10:48,11:35,12:19
+12/02/2012,00:17,01:01,01:48,02:32,10:04,10:48,11:35,12:18
+12/03/2012,00:18,01:02,01:49,02:33,10:03,10:47,11:34,12:18
+12/04/2012,00:20,01:04,01:50,02:35,10:02,10:47,11:34,12:18
+12/05/2012,00:21,01:05,01:52,02:36,10:02,10:46,11:33,12:17
+12/06/2012,00:22,01:06,01:53,02:37,10:01,10:46,11:33,12:17
+12/07/2012,00:23,01:07,01:54,02:39,10:01,10:46,11:33,12:17
+12/08/2012,00:24,01:08,01:55,02:40,10:01,10:45,11:33,12:17
+12/09/2012,00:25,01:09,01:56,02:41,10:00,10:45,11:32,12:17
+12/10/2012,00:26,01:10,01:57,02:43,10:00,10:45,11:32,12:17
+12/11/2012,00:27,01:11,01:59,02:44,10:00,10:45,11:32,12:17
+12/12/2012,00:28,01:12,02:00,02:45,10:00,10:45,11:32,12:17
+12/13/2012,00:29,01:13,02:00,02:46,10:00,10:45,11:32,12:17
+12/14/2012,00:29,01:14,02:01,02:47,10:00,10:45,11:33,12:17
+12/15/2012,00:30,01:15,02:02,02:48,10:00,10:45,11:33,12:17
+12/16/2012,00:31,01:15,02:03,02:49,10:00,10:45,11:33,12:17
+12/17/2012,00:32,01:16,02:04,02:49,10:00,10:46,11:33,12:18
+12/18/2012,00:32,01:17,02:04,02:50,10:00,10:46,11:34,12:18
+12/19/2012,00:33,01:17,02:05,02:51,10:01,10:46,11:34,12:19
+12/20/2012,00:33,01:18,02:06,02:51,10:01,10:47,11:34,12:19
+12/21/2012,00:34,01:19,02:06,02:52,10:02,10:47,11:35,12:19
+12/22/2012,00:34,01:19,02:07,02:52,10:02,10:48,11:35,12:20
+12/23/2012,00:35,01:19,02:07,02:53,10:03,10:48,11:36,12:21
+12/24/2012,00:35,01:20,02:08,02:53,10:03,10:49,11:37,12:21
+12/25/2012,00:36,01:20,02:08,02:53,10:04,10:50,11:37,12:22
+12/26/2012,00:36,01:20,02:08,02:54,10:05,10:50,11:38,12:23
+12/27/2012,00:36,01:21,02:08,02:54,10:06,10:51,11:39,12:23
+12/28/2012,00:36,01:21,02:08,02:54,10:07,10:52,11:40,12:24
+12/29/2012,00:37,01:21,02:08,02:54,10:08,10:53,11:41,12:25
+12/30/2012,00:37,01:21,02:09,02:54,10:09,10:54,11:42,12:26
+12/31/2012,00:37,01:21,02:08,02:54,10:10,10:55,11:42,12:27
Please sign in to comment.
Something went wrong with that request. Please try again.