text: import datetime
  
  from vesper.ephem.usno_rise_set_table import UsnoRiseSetTable
  from vesper.tests.test_case import TestCase
  import vesper.ephem.usno_table_class_utils as utils
  
  
  class UsnoRiseSetTableTests(TestCase):
  
  
      # I have commented this out so we don't hit the USNO web site every
      # time we run Vesper unit tests.
  #     def test_download_table_text(self):
  #         text = UsnoRiseSetTable.download_table_text(
  #             'Sunrise/Sunset', 42.45, -76.5, 2015, -4, 'Ithaca, NY')
  #         self.assertEqual(text.strip(), _ITHACA_SUN_TABLE.strip())
          
          
      def test_ithaca_sun_table(self):
            
          header = ('Sunrise/Sunset', 'Sun') + _ITHACA_HEADER_DATA
            
          times = {
                     
              'rise': (
                  (0, '2015-01-01 08:36:00'),
                  (364, '2015-12-31 08:35:00')
              ),
                
              'set': (
                  (0, '2015-01-01 17:44:00'),
                  (364, '2015-12-31 17:43:00')
              ),
                                 
          }
            
          self._test_table(_ITHACA_SUN_TABLE, header, 365, 365, times)
            
            
      def _test_table(
              self, table, expected_header, expected_num_risings,
              expected_num_settings, expected_times=None):
            
          table = UsnoRiseSetTable(table)
          self._check_table_header(table, *expected_header)
          self._check_table_body(
              table, expected_num_risings, expected_num_settings, expected_times)
            
            
      def _check_table_header(
              self, table, table_type, body, place_name, lat, lon, year,
              utc_offset):
          
          self.assertEqual(table.type, table_type)
          self.assertEqual(table.body, body)
          self.assertEqual(table.place_name, place_name)
          self.assertEqual(table.lat, lat)
          self.assertEqual(table.lon, lon)
          self.assertEqual(table.year, year)
          
          utc_offset = datetime.timedelta(hours=utc_offset)
          self.assertEqual(table.utc_offset, utc_offset)
          
          
      def _check_table_body(
              self, table, expected_num_risings, expected_num_settings,
              expected_times):
          
          if expected_times is not None:
                
              times = expected_times
                
              self._assert_times(
                  table.rising_times, expected_num_risings, times['rise'],
                  table.utc_offset)
                
              self._assert_times(
                  table.setting_times, expected_num_settings, times['set'],
                  table.utc_offset)
            
            
      def _assert_times(self, times, length, expected_times, utc_offset):
          self.assertEqual(len(times), length)
          for i, expected in expected_times:
              self._assert_time(times[i], expected, utc_offset)
          
          
      def _assert_time(self, time, expected, utc_offset):
          expected = datetime.datetime.strptime(expected, '%Y-%m-%d %H:%M:%S')
          expected = utils.naive_to_utc(expected, utc_offset)
          self.assertEqual(time, expected)
          
          
      def test_ithaca_moon_table(self):
            
          header = ('Moonrise/Moonset', 'Moon') + _ITHACA_HEADER_DATA
            
          times = {
                              
              'rise': (
                  (0, '2015-01-01 15:17:00'),
                  (351, '2015-12-30 23:21:00')
              ),
                
              'set': (
                  (0, '2015-01-01 04:59:00'),
                  (352, '2015-12-31 12:10:00')
              ),
                                          
          }
            
          self._test_table(_ITHACA_MOON_TABLE, header, 352, 353, times)
    
    
      def test_ithaca_civil_twilight_table(self):
          self._test_ithaca_twilight_table('Civil', _ITHACA_CIVIL_TWILIGHT_TABLE)
            
            
      def _test_ithaca_twilight_table(self, twilight_type, table):
          title = '{} Twilight'.format(twilight_type)
          header = (title, 'Sun') + _ITHACA_HEADER_DATA
          self._test_table(table, header, 365, 365)
            
            
      def test_ithaca_nautical_twilight_table(self):
          self._test_ithaca_twilight_table(
              'Nautical', _ITHACA_NAUTICAL_TWILIGHT_TABLE)
            
            
      def test_ithaca_astronomical_twilight_table(self):
          self._test_ithaca_twilight_table(
              'Astronomical', _ITHACA_ASTRONOMICAL_TWILIGHT_TABLE)
            
            
      def test_ithaca_sun_utc_table(self):
          header = ('Sunrise/Sunset', 'Sun') + _ITHACA_HEADER_DATA[:-1] + (0,)
          self._test_table(_ITHACA_SUN_UTC_TABLE, header, 365, 365)
            
            
      def test_high_latitude_sun_table(self):
          header = ('Sunrise/Sunset', 'Sun', '', 80, 0, 2015, 0)
          self._test_table(_HIGH_LATITUDE_SUN_TABLE, header, 101, 101)
            
            
      def test_zero_lat_lon_sun_table(self):
          header = ('Sunrise/Sunset', 'Sun', '', 0, 0, 2000, 0)
          self._test_table(_ZERO_LAT_LON_SUN_TABLE, header, 366, 366)
            
            
      def test_east_south_sun_table(self):
          header = ('Sunrise/Sunset', 'Sun', '', -42.45, 76.5, 2015, 4)
          self._test_table(_EAST_SOUTH_SUN_TABLE, header, 365, 365)
          
          
  _ITHACA_HEADER_DATA = ('ITHACA, NY', 42.45, -76.5, 2015, -4)
  
  
  _ITHACA_SUN_TABLE = '''
               o  ,    o  ,                                     ITHACA, NY                               Astronomical Applications Dept.
  Location: W076 30, N42 27                          Rise and Set for the Sun for 2015                   U. S. Naval Observatory        
                                                                                                         Washington, DC  20392-5420     
                                                        Zone:  4h West of Greenwich                                                     
                                                                                                                                        
                                                                                                                                        
         Jan.       Feb.       Mar.       Apr.       May        June       July       Aug.       Sept.      Oct.       Nov.       Dec.  
  Day Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set
       h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m
  01  0836 1744  0820 1820  0742 1855  0649 1932  0601 2006  0532 2036  0533 2047  0558 2026  0631 1941  0703 1848  0739 1759  0815 1734
  02  0836 1745  0819 1821  0740 1857  0647 1933  0600 2007  0531 2037  0533 2047  0559 2025  0632 1939  0704 1846  0740 1758  0817 1734
  03  0836 1745  0818 1822  0739 1858  0645 1934  0559 2008  0531 2038  0534 2047  0600 2024  0633 1937  0705 1844  0742 1757  0818 1734
  04  0836 1746  0817 1824  0737 1859  0644 1935  0557 2009  0530 2039  0534 2046  0601 2022  0634 1935  0706 1843  0743 1756  0819 1733
  05  0836 1747  0816 1825  0735 1900  0642 1936  0556 2010  0530 2039  0535 2046  0602 2021  0635 1934  0707 1841  0744 1755  0820 1733
  06  0835 1748  0814 1826  0734 1902  0640 1937  0555 2011  0530 2040  0535 2046  0603 2020  0636 1932  0708 1839  0745 1753  0821 1733
  07  0835 1749  0813 1827  0732 1903  0639 1938  0554 2012  0529 2041  0536 2045  0604 2019  0637 1930  0709 1838  0747 1752  0822 1733
  08  0835 1750  0812 1829  0730 1904  0637 1940  0552 2013  0529 2041  0537 2045  0605 2017  0638 1928  0711 1836  0748 1751  0822 1733
  09  0835 1751  0811 1830  0729 1905  0635 1941  0551 2014  0529 2042  0537 2045  0606 2016  0639 1927  0712 1834  0749 1750  0823 1733
  10  0835 1753  0810 1831  0727 1906  0634 1942  0550 2015  0529 2042  0538 2044  0607 2015  0640 1925  0713 1833  0750 1749  0824 1733
  11  0834 1754  0808 1833  0725 1907  0632 1943  0549 2016  0529 2043  0539 2044  0608 2013  0641 1923  0714 1831  0752 1748  0825 1733
  12  0834 1755  0807 1834  0724 1909  0630 1944  0548 2018  0528 2043  0540 2043  0610 2012  0642 1921  0715 1829  0753 1747  0826 1733
  13  0834 1756  0806 1835  0722 1910  0629 1945  0547 2019  0528 2044  0540 2043  0611 2010  0644 1920  0716 1828  0754 1746  0827 1733
  14  0833 1757  0804 1837  0720 1911  0627 1946  0546 2020  0528 2044  0541 2042  0612 2009  0645 1918  0717 1826  0755 1745  0828 1734
  15  0833 1758  0803 1838  0718 1912  0625 1947  0545 2021  0528 2045  0542 2041  0613 2008  0646 1916  0719 1824  0757 1744  0828 1734
  16  0832 1759  0802 1839  0717 1913  0624 1949  0544 2022  0528 2045  0543 2041  0614 2006  0647 1914  0720 1823  0758 1743  0829 1734
  17  0832 1801  0800 1840  0715 1914  0622 1950  0543 2023  0528 2046  0544 2040  0615 2005  0648 1913  0721 1821  0759 1742  0830 1734
  18  0831 1802  0759 1842  0713 1916  0621 1951  0542 2024  0528 2046  0545 2039  0616 2003  0649 1911  0722 1820  0800 1742  0830 1735
  19  0831 1803  0757 1843  0711 1917  0619 1952  0541 2025  0529 2046  0546 2039  0617 2002  0650 1909  0723 1818  0802 1741  0831 1735
  20  0830 1804  0756 1844  0710 1918  0617 1953  0540 2026  0529 2046  0546 2038  0618 2000  0651 1907  0725 1816  0803 1740  0831 1736
  21  0829 1805  0754 1846  0708 1919  0616 1954  0539 2027  0529 2047  0547 2037  0619 1958  0652 1905  0726 1815  0804 1739  0832 1736
  22  0829 1807  0753 1847  0706 1920  0614 1955  0538 2028  0529 2047  0548 2036  0620 1957  0653 1904  0727 1813  0805 1739  0833 1737
  23  0828 1808  0751 1848  0705 1921  0613 1957  0537 2029  0529 2047  0549 2035  0621 1955  0654 1902  0728 1812  0806 1738  0833 1737
  24  0827 1809  0750 1849  0703 1923  0611 1958  0537 2030  0530 2047  0550 2034  0622 1954  0655 1900  0729 1810  0808 1737  0833 1738
  25  0827 1811  0748 1851  0701 1924  0610 1959  0536 2030  0530 2047  0551 2033  0623 1952  0656 1858  0731 1809  0809 1737  0834 1738
  26  0826 1812  0747 1852  0659 1925  0608 2000  0535 2031  0530 2047  0552 2032  0624 1950  0657 1857  0732 1808  0810 1736  0834 1739
  27  0825 1813  0745 1853  0658 1926  0607 2001  0535 2032  0531 2047  0553 2031  0626 1949  0658 1855  0733 1806  0811 1736  0834 1740
  28  0824 1814  0743 1854  0656 1927  0606 2002  0534 2033  0531 2047  0554 2030  0627 1947  0700 1853  0734 1805  0812 1735  0835 1740
  29  0823 1816             0654 1928  0604 2003  0533 2034  0532 2047  0555 2029  0628 1946  0701 1851  0735 1803  0813 1735  0835 1741
  30  0822 1817             0652 1929  0603 2004  0533 2035  0532 2047  0556 2028  0629 1944  0702 1850  0737 1802  0814 1735  0835 1742
  31  0821 1818             0651 1931             0532 2036             0557 2027  0630 1942             0738 1801             0835 1743
  '''
  
  _ITHACA_MOON_TABLE = '''
               o  ,    o  ,                                     ITHACA, NY                               Astronomical Applications Dept.
  Location: W076 30, N42 27                         Rise and Set for the Moon for 2015                   U. S. Naval Observatory        
                                                                                                         Washington, DC  20392-5420     
                                                        Zone:  4h West of Greenwich                                                     
                                                                                                                                        
                                                                                                                                        
         Jan.       Feb.       Mar.       Apr.       May        June       July       Aug.       Sept.      Oct.       Nov.       Dec.  
  Day Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set
       h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m
  01  1517 0459  1635 0627  1526 0507  1705 0523  1749 0450  1935 0503  2014 0518  2108 0723  2132 0954  2132 1106  2255 1243  2338 1238
  02  1603 0559  1731 0708  1622 0545  1802 0551  1847 0520  2034 0546  2105 0618  2145 0836  2211 1106  2221 1211  2354 1326       1310
  03  1653 0654  1828 0745  1718 0619  1859 0619  1947 0552  2131 0635  2151 0723  2221 0949  2253 1216  2314 1310       1404  0037 1339
  04  1746 0745  1925 0818  1815 0651  1957 0648  2046 0627  2223 0730  2232 0832  2257 1101  2339 1321       1402  0052 1438  0134 1408
  05  1842 0829  2021 0848  1912 0720  2056 0718  2145 0706  2310 0831  2310 0942  2334 1212       1422  0009 1448  0150 1508  0231 1436
  06  1938 0909  2118 0917  2009 0748  2155 0751  2242 0751  2353 0936  2345 1053       1320  0028 1517  0105 1528  0247 1537  0327 1504
  07  2036 0944  2215 0945  2106 0816  2253 0827  2336 0841       1044       1203  0013 1426  0120 1605  0203 1603  0343 1605  0425 1534
  08  2133 1016  2312 1013  2204 0845  2351 0908       0938  0031 1153  0020 1313  0055 1529  0215 1649  0300 1635  0440 1633  0522 1608
  09  2230 1045       1042  2302 0916       0954  0025 1039  0107 1302  0055 1421  0140 1627  0311 1727  0357 1705  0537 1702  0620 1645
  10  2326 1113  0010 1113       0949  0046 1046  0110 1144  0142 1412  0132 1528  0230 1720  0408 1801  0454 1734  0634 1734  0718 1726
  11       1141  0109 1148  0000 1026  0138 1144  0151 1252  0216 1521  0211 1634  0323 1807  0506 1833  0551 1802  0732 1808  0815 1814
  12  0024 1210  0209 1228  0059 1109  0226 1247  0229 1401  0252 1630  0254 1735  0419 1849  0603 1902  0647 1830  0830 1847  0909 1907
  13  0122 1240  0308 1313  0156 1157  0310 1354  0304 1512  0330 1738  0342 1832  0516 1926  0700 1930  0744 1900  0926 1931  0959 2006
  14  0221 1313  0407 1406  0251 1252  0351 1504  0340 1623  0412 1843  0434 1924  0614 1959  0757 1959  0841 1933  1021 2020  1044 2109
  15  0322 1351  0503 1506  0343 1354  0429 1616  0415 1734  0458 1945  0529 2010  0712 2030  0853 2027  0939 2008  1112 2114  1126 2214
  16  0424 1434  0555 1613  0431 1501  0506 1729  0453 1845  0548 2041  0626 2050  0810 2059  0950 2058  1035 2048  1200 2213  1204 2321
  17  0525 1525  0643 1725  0516 1612  0543 1843  0534 1953  0642 2130  0725 2126  0907 2127  1047 2131  1131 2133  1244 2316  1240     
  18  0624 1624  0726 1840  0557 1726  0620 1956  0618 2058  0740 2214  0823 2158  1003 2155  1144 2208  1224 2223  1324       1314 0030
  19  0720 1729  0806 1955  0635 1841  0700 2107  0707 2158  0838 2252  0921 2228  1100 2225  1240 2250  1314 2319  1401 0022  1348 0139
  20  0810 1840  0844 2110  0713 1956  0743 2214  0800 2251  0937 2326  1018 2256  1157 2256  1335 2337  1401       1437 0130  1424 0248
  21  0855 1954  0921 2223  0751 2110  0830 2316  0856 2338  1035 2357  1115 2324  1254 2331  1429       1444 0021  1512 0240  1502 0358
  22  0936 2108  0958 2334  0829 2221  0921       0954       1132       1212 2353  1352       1519 0030  1524 0126  1548 0351  1545 0508
  23  1013 2221  1036       0910 2329  1014 0011  1052 0018  1229 0026  1309       1449 0010  1606 0130  1602 0235  1626 0503  1632 0615
  24  1049 2332  1117 0042  0954       1110 0100  1149 0054  1326 0054  1407 0023  1545 0054  1649 0235  1639 0346  1708 0616  1724 0719
  25  1124       1201 0145  1042 0032  1207 0143  1247 0126  1423 0122  1506 0056  1639 0146  1730 0345  1716 0500  1754 0727  1821 0818
  26  1200 0042  1248 0244  1132 0130  1304 0221  1344 0156  1522 0151  1605 0133  1730 0244  1809 0458  1754 0614  1845 0835  1921 0910
  27  1237 0149  1338 0337  1225 0221  1400 0254  1440 0224  1621 0223  1703 0215  1816 0349  1847 0612  1835 0729  1940 0937  2022 0955
  28  1318 0253  1431 0425  1320 0306  1457 0325  1538 0252  1721 0258  1800 0305  1859 0458  1925 0728  1920 0842  2039 1032  2123 1034
  29  1402 0353             1416 0345  1554 0354  1636 0321  1821 0339  1853 0401  1939 0611  2004 0843  2008 0951  2139 1120  2223 1109
  30  1450 0450             1512 0421  1651 0422  1735 0351  1919 0425  1942 0504  2017 0726  2046 0956  2101 1055  2239 1201  2321 1140
  31  1541 0541             1609 0453             1835 0425             2027 0612  2054 0841             2157 1153                  1210
  
  NOTE: BLANK SPACES IN THE TABLE INDICATE THAT A RISING OR A SETTING DID NOT OCCUR DURING THAT 24 HR INTERVAL.
  
  '''
  
  _ITHACA_CIVIL_TWILIGHT_TABLE = '''
               o  ,    o  ,                                     ITHACA, NY                               Astronomical Applications Dept.
  Location: W076 30, N42 27                               Civil Twilight for 2015                        U. S. Naval Observatory        
                                                                                                         Washington, DC  20392-5420     
                                                        Zone:  4h West of Greenwich                                                     
                                                                                                                                        
                                                                                                                                        
         Jan.       Feb.       Mar.       Apr.       May        June       July       Aug.       Sept.      Oct.       Nov.       Dec.  
  Day Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End
       h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m
  01  0804 1816  0750 1849  0714 1924  0621 2000  0531 2036  0458 2110  0458 2122  0526 2058  0602 2009  0635 1916  0710 1829  0744 1806
  02  0804 1816  0749 1851  0712 1925  0619 2001  0529 2038  0457 2111  0458 2121  0527 2056  0603 2008  0636 1914  0711 1827  0745 1805
  03  0804 1817  0748 1852  0710 1926  0617 2002  0528 2039  0457 2112  0459 2121  0528 2055  0604 2006  0637 1912  0712 1826  0746 1805
  04  0804 1818  0747 1853  0709 1927  0615 2004  0526 2040  0456 2113  0500 2121  0530 2054  0605 2004  0638 1911  0713 1825  0747 1805
  05  0804 1819  0746 1854  0707 1928  0613 2005  0525 2041  0456 2114  0500 2120  0531 2053  0606 2002  0639 1909  0715 1824  0748 1805
  06  0804 1820  0745 1856  0706 1930  0612 2006  0524 2042  0455 2114  0501 2120  0532 2051  0607 2001  0640 1907  0716 1823  0749 1805
  07  0804 1821  0744 1857  0704 1931  0610 2007  0522 2044  0455 2115  0502 2120  0533 2050  0608 1959  0641 1906  0717 1822  0750 1805
  08  0804 1822  0743 1858  0702 1932  0608 2008  0521 2045  0455 2116  0502 2119  0534 2048  0610 1957  0642 1904  0718 1821  0751 1805
  09  0803 1823  0742 1859  0701 1933  0606 2010  0520 2046  0454 2116  0503 2119  0535 2047  0611 1955  0644 1902  0719 1820  0752 1805
  10  0803 1824  0740 1901  0659 1934  0605 2011  0518 2047  0454 2117  0504 2118  0537 2045  0612 1953  0645 1901  0721 1819  0752 1805
  11  0803 1825  0739 1902  0657 1936  0603 2012  0517 2048  0454 2118  0505 2118  0538 2044  0613 1952  0646 1859  0722 1818  0753 1805
  12  0803 1826  0738 1903  0656 1937  0601 2013  0516 2050  0454 2118  0506 2117  0539 2042  0614 1950  0647 1857  0723 1817  0754 1805
  13  0803 1827  0737 1904  0654 1938  0600 2014  0515 2051  0454 2119  0507 2116  0540 2041  0615 1948  0648 1856  0724 1816  0755 1805
  14  0802 1828  0735 1906  0652 1939  0558 2016  0514 2052  0454 2119  0507 2116  0541 2039  0616 1946  0649 1854  0725 1815  0756 1806
  15  0802 1829  0734 1907  0650 1940  0556 2017  0512 2053  0453 2120  0508 2115  0542 2038  0617 1944  0650 1853  0726 1814  0756 1806
  16  0801 1830  0733 1908  0649 1941  0555 2018  0511 2054  0453 2120  0509 2114  0544 2036  0618 1943  0651 1851  0728 1813  0757 1806
  17  0801 1832  0731 1909  0647 1943  0553 2019  0510 2055  0453 2120  0510 2113  0545 2035  0620 1941  0653 1850  0729 1813  0758 1806
  18  0800 1833  0730 1910  0645 1944  0551 2020  0509 2056  0454 2121  0511 2113  0546 2033  0621 1939  0654 1848  0730 1812  0758 1807
  19  0800 1834  0729 1912  0643 1945  0550 2022  0508 2058  0454 2121  0512 2112  0547 2031  0622 1937  0655 1847  0731 1811  0759 1807
  20  0759 1835  0727 1913  0642 1946  0548 2023  0507 2059  0454 2121  0513 2111  0548 2030  0623 1935  0656 1845  0732 1811  0759 1808
  21  0759 1836  0726 1914  0640 1947  0546 2024  0506 2100  0454 2122  0514 2110  0549 2028  0624 1934  0657 1844  0733 1810  0800 1808
  22  0758 1837  0724 1915  0638 1948  0545 2025  0505 2101  0454 2122  0515 2109  0550 2027  0625 1932  0658 1842  0734 1809  0800 1809
  23  0758 1839  0723 1917  0636 1950  0543 2027  0504 2102  0454 2122  0516 2108  0552 2025  0626 1930  0659 1841  0736 1809  0801 1809
  24  0757 1840  0721 1918  0635 1951  0541 2028  0503 2103  0455 2122  0517 2107  0553 2023  0627 1928  0701 1839  0737 1808  0801 1810
  25  0756 1841  0720 1919  0633 1952  0540 2029  0503 2104  0455 2122  0518 2106  0554 2021  0628 1926  0702 1838  0738 1808  0802 1810
  26  0755 1842  0718 1920  0631 1953  0538 2030  0502 2105  0455 2122  0519 2105  0555 2020  0629 1925  0703 1836  0739 1807  0802 1811
  27  0755 1843  0717 1921  0629 1954  0537 2031  0501 2106  0456 2122  0521 2104  0556 2018  0630 1923  0704 1835  0740 1807  0802 1812
  28  0754 1845  0715 1923  0628 1955  0535 2033  0500 2107  0456 2122  0522 2103  0557 2016  0631 1921  0705 1834  0741 1807  0803 1812
  29  0753 1846             0626 1957  0534 2034  0500 2108  0457 2122  0523 2101  0558 2015  0633 1919  0706 1832  0742 1806  0803 1813
  30  0752 1847             0624 1958  0532 2035  0459 2109  0457 2122  0524 2100  0600 2013  0634 1918  0708 1831  0743 1806  0803 1814
  31  0751 1848             0622 1959             0458 2110             0525 2059  0601 2011             0709 1830             0803 1815
  '''
  
  _ITHACA_NAUTICAL_TWILIGHT_TABLE = '''
               o  ,    o  ,                                     ITHACA, NY                               Astronomical Applications Dept.
  Location: W076 30, N42 27                             Nautical Twilight for 2015                       U. S. Naval Observatory        
                                                                                                         Washington, DC  20392-5420     
                                                        Zone:  4h West of Greenwich                                                     
                                                                                                                                        
                                                                                                                                        
         Jan.       Feb.       Mar.       Apr.       May        June       July       Aug.       Sept.      Oct.       Nov.       Dec.  
  Day Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End
       h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m
  01  0728 1851  0716 1923  0641 1956  0547 2034  0453 2114  0414 2154  0413 2206  0446 2137  0527 2044  0602 1948  0637 1902  0709 1841
  02  0728 1852  0716 1924  0640 1958  0545 2035  0452 2115  0414 2155  0414 2206  0448 2136  0528 2042  0603 1947  0638 1901  0710 1840
  03  0729 1853  0715 1925  0638 1959  0543 2036  0450 2117  0413 2156  0414 2206  0449 2134  0530 2040  0604 1945  0639 1900  0711 1840
  04  0729 1853  0714 1927  0636 2000  0541 2038  0448 2118  0412 2157  0415 2205  0450 2133  0531 2038  0605 1943  0640 1858  0712 1840
  05  0729 1854  0713 1928  0635 2001  0540 2039  0447 2120  0412 2158  0416 2205  0452 2131  0532 2036  0607 1942  0641 1857  0713 1840
  06  0729 1855  0712 1929  0633 2002  0538 2040  0445 2121  0411 2159  0417 2204  0453 2130  0533 2035  0608 1940  0642 1856  0714 1840
  07  0729 1856  0711 1930  0631 2003  0536 2041  0444 2122  0411 2159  0418 2204  0454 2128  0534 2033  0609 1938  0643 1855  0715 1840
  08  0729 1857  0709 1931  0630 2005  0534 2043  0442 2124  0410 2200  0418 2203  0456 2126  0536 2031  0610 1936  0645 1854  0715 1840
  09  0728 1858  0708 1933  0628 2006  0532 2044  0441 2125  0410 2201  0419 2202  0457 2125  0537 2029  0611 1935  0646 1853  0716 1840
  10  0728 1859  0707 1934  0626 2007  0530 2045  0439 2127  0409 2202  0420 2202  0458 2123  0538 2027  0612 1933  0647 1852  0717 1840
  11  0728 1900  0706 1935  0625 2008  0528 2047  0438 2128  0409 2202  0421 2201  0500 2122  0539 2025  0613 1932  0648 1852  0718 1840
  12  0728 1901  0705 1936  0623 2009  0527 2048  0436 2129  0409 2203  0422 2200  0501 2120  0540 2023  0614 1930  0649 1851  0719 1841
  13  0728 1902  0704 1937  0621 2011  0525 2049  0435 2131  0409 2204  0423 2159  0503 2118  0542 2021  0615 1928  0650 1850  0719 1841
  14  0727 1903  0702 1939  0620 2012  0523 2051  0433 2132  0409 2204  0424 2159  0504 2116  0543 2019  0617 1927  0651 1849  0720 1841
  15  0727 1904  0701 1940  0618 2013  0521 2052  0432 2134  0408 2205  0425 2158  0505 2115  0544 2018  0618 1925  0652 1848  0721 1841
  16  0727 1905  0700 1941  0616 2014  0519 2053  0431 2135  0408 2205  0427 2157  0506 2113  0545 2016  0619 1924  0654 1848  0721 1842
  17  0726 1906  0659 1942  0614 2015  0517 2055  0430 2136  0408 2206  0428 2156  0508 2111  0546 2014  0620 1922  0655 1847  0722 1842
  18  0726 1907  0657 1943  0612 2017  0516 2056  0428 2138  0408 2206  0429 2155  0509 2110  0547 2012  0621 1921  0656 1846  0723 1842
  19  0725 1908  0656 1944  0611 2018  0514 2057  0427 2139  0408 2206  0430 2154  0510 2108  0549 2010  0622 1919  0657 1846  0723 1843
  20  0725 1909  0654 1946  0609 2019  0512 2059  0426 2140  0409 2206  0431 2153  0512 2106  0550 2008  0623 1918  0658 1845  0724 1843
  21  0724 1910  0653 1947  0607 2020  0510 2100  0425 2141  0409 2207  0432 2152  0513 2104  0551 2006  0624 1916  0659 1844  0724 1844
  22  0724 1912  0652 1948  0605 2021  0509 2102  0424 2143  0409 2207  0434 2150  0514 2102  0552 2005  0625 1915  0700 1844  0725 1844
  23  0723 1913  0650 1949  0603 2023  0507 2103  0422 2144  0409 2207  0435 2149  0516 2101  0553 2003  0627 1913  0701 1843  0725 1845
  24  0723 1914  0649 1950  0602 2024  0505 2104  0421 2145  0410 2207  0436 2148  0517 2059  0554 2001  0628 1912  0702 1843  0726 1845
  25  0722 1915  0647 1952  0600 2025  0503 2106  0420 2146  0410 2207  0437 2147  0518 2057  0555 1959  0629 1911  0703 1842  0726 1846
  26  0721 1916  0646 1953  0558 2026  0502 2107  0419 2147  0410 2207  0439 2146  0520 2055  0557 1957  0630 1909  0704 1842  0727 1846
  27  0721 1917  0644 1954  0556 2028  0500 2108  0418 2149  0411 2207  0440 2144  0521 2053  0558 1956  0631 1908  0705 1842  0727 1847
  28  0720 1918  0643 1955  0554 2029  0458 2110  0417 2150  0411 2207  0441 2143  0522 2051  0559 1954  0632 1907  0706 1841  0727 1848
  29  0719 1920             0553 2030  0456 2111  0417 2151  0412 2207  0443 2142  0523 2050  0600 1952  0633 1905  0707 1841  0728 1848
  30  0718 1921             0551 2031  0455 2113  0416 2152  0412 2207  0444 2140  0525 2048  0601 1950  0634 1904  0708 1841  0728 1849
  31  0717 1922             0549 2033             0415 2153             0445 2139  0526 2046             0636 1903             0728 1850
  '''
  
  _ITHACA_ASTRONOMICAL_TWILIGHT_TABLE = '''
               o  ,    o  ,                                     ITHACA, NY                               Astronomical Applications Dept.
  Location: W076 30, N42 27                           Astronomical Twilight for 2015                     U. S. Naval Observatory        
                                                                                                         Washington, DC  20392-5420     
                                                        Zone:  4h West of Greenwich                                                     
                                                                                                                                        
                                                                                                                                        
         Jan.       Feb.       Mar.       Apr.       May        June       July       Aug.       Sept.      Oct.       Nov.       Dec.  
  Day Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End  Begin End
       h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m
  01  0654 1925  0644 1956  0609 2029  0512 2109  0412 2155  0323 2246  0319 2300  0402 2221  0451 2120  0529 2021  0604 1935  0635 1914
  02  0654 1926  0643 1957  0607 2030  0510 2110  0410 2157  0322 2247  0320 2300  0403 2220  0452 2118  0530 2020  0605 1933  0636 1914
  03  0654 1927  0642 1958  0605 2031  0508 2112  0408 2159  0321 2248  0320 2259  0405 2218  0453 2116  0531 2018  0606 1932  0637 1914
  04  0655 1928  0641 2000  0604 2033  0506 2113  0406 2201  0320 2250  0321 2259  0407 2216  0455 2114  0533 2016  0607 1931  0638 1914
  05  0655 1928  0640 2001  0602 2034  0504 2114  0404 2202  0319 2251  0322 2258  0408 2214  0456 2112  0534 2014  0608 1930  0639 1914
  06  0655 1929  0639 2002  0600 2035  0502 2116  0403 2204  0318 2252  0323 2257  0410 2212  0458 2110  0535 2013  0609 1929  0640 1914
  07  0655 1930  0638 2003  0559 2036  0500 2117  0401 2206  0317 2253  0325 2256  0412 2210  0459 2108  0536 2011  0611 1928  0641 1914
  08  0655 1931  0637 2004  0557 2037  0458 2119  0359 2207  0317 2254  0326 2256  0413 2208  0500 2106  0537 2009  0612 1927  0641 1914
  09  0655 1932  0636 2005  0555 2039  0456 2120  0357 2209  0316 2255  0327 2255  0415 2207  0502 2104  0538 2007  0613 1926  0642 1914
  10  0654 1933  0635 2006  0554 2040  0454 2122  0355 2211  0315 2256  0328 2254  0417 2205  0503 2102  0539 2006  0614 1925  0643 1914
  11  0654 1934  0633 2008  0552 2041  0452 2123  0354 2213  0315 2257  0329 2253  0418 2203  0504 2100  0541 2004  0615 1925  0644 1915
  12  0654 1935  0632 2009  0550 2042  0450 2125  0352 2214  0315 2258  0331 2252  0420 2201  0506 2058  0542 2002  0616 1924  0644 1915
  13  0654 1936  0631 2010  0548 2044  0448 2126  0350 2216  0314 2258  0332 2250  0422 2159  0507 2056  0543 2001  0617 1923  0645 1915
  14  0654 1937  0630 2011  0546 2045  0446 2128  0348 2218  0314 2259  0334 2249  0423 2157  0508 2054  0544 1959  0618 1922  0646 1915
  15  0653 1938  0629 2012  0545 2046  0444 2129  0347 2219  0314 2300  0335 2248  0425 2155  0510 2052  0545 1958  0619 1921  0647 1915
  16  0653 1939  0627 2013  0543 2047  0442 2131  0345 2221  0313 2300  0336 2247  0426 2153  0511 2050  0546 1956  0620 1921  0647 1916
  17  0653 1940  0626 2015  0541 2049  0440 2133  0343 2223  0313 2301  0338 2245  0428 2151  0512 2048  0547 1955  0621 1920  0648 1916
  18  0652 1941  0625 2016  0539 2050  0438 2134  0342 2224  0313 2301  0339 2244  0430 2149  0513 2046  0548 1953  0622 1919  0648 1917
  19  0652 1942  0623 2017  0537 2051  0436 2136  0340 2226  0313 2301  0341 2243  0431 2147  0515 2044  0550 1952  0623 1919  0649 1917
  20  0652 1943  0622 2018  0535 2053  0434 2137  0339 2228  0313 2302  0342 2241  0433 2145  0516 2042  0551 1950  0624 1918  0650 1917
  21  0651 1944  0621 2019  0534 2054  0432 2139  0337 2229  0314 2302  0344 2240  0434 2143  0517 2040  0552 1949  0625 1918  0650 1918
  22  0651 1945  0619 2021  0532 2055  0430 2141  0336 2231  0314 2302  0346 2238  0436 2141  0518 2038  0553 1947  0627 1917  0651 1918
  23  0650 1946  0618 2022  0530 2057  0428 2142  0334 2233  0314 2302  0347 2237  0437 2139  0520 2036  0554 1946  0628 1917  0651 1919
  24  0649 1947  0616 2023  0528 2058  0426 2144  0333 2234  0314 2302  0349 2235  0439 2137  0521 2034  0555 1945  0629 1916  0652 1920
  25  0649 1948  0615 2024  0526 2059  0424 2145  0331 2236  0315 2302  0350 2233  0440 2135  0522 2032  0556 1943  0630 1916  0652 1920
  26  0648 1949  0613 2025  0524 2101  0422 2147  0330 2237  0315 2302  0352 2232  0442 2133  0523 2031  0557 1942  0631 1916  0652 1921
  27  0647 1951  0612 2027  0522 2102  0420 2149  0329 2239  0316 2302  0354 2230  0443 2130  0524 2029  0558 1941  0631 1915  0653 1921
  28  0647 1952  0610 2028  0520 2103  0418 2150  0327 2240  0316 2302  0355 2229  0445 2128  0526 2027  0600 1939  0632 1915  0653 1922
  29  0646 1953             0518 2105  0416 2152  0326 2242  0317 2301  0357 2227  0446 2126  0527 2025  0601 1938  0633 1915  0653 1923
  30  0645 1954             0516 2106  0414 2154  0325 2243  0318 2301  0359 2225  0448 2124  0528 2023  0602 1937  0634 1915  0654 1923
  31  0644 1955             0514 2107             0324 2245             0400 2223  0449 2122             0603 1936             0654 1924
  '''
  
  _ITHACA_SUN_UTC_TABLE = '''
               o  ,    o  ,                                     ITHACA, NY                               Astronomical Applications Dept.
  Location: W076 30, N42 27                          Rise and Set for the Sun for 2015                   U. S. Naval Observatory        
                                                                                                         Washington, DC  20392-5420     
                                                              Universal Time                                                            
                                                                                                                                        
                                                                                                                                        
         Jan.       Feb.       Mar.       Apr.       May        June       July       Aug.       Sept.      Oct.       Nov.       Dec.  
  Day Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set
       h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m
  01  1236 2144  1220 2220  1142 2255  1049 2332  1001 0004  0932 0036  0933 0047  0958 0027  1031 2341  1103 2248  1139 2159  1215 2134
  02  1236 2145  1219 2221  1140 2257  1047 2333  1000 0006  0931 0036  0933 0047  0959 0026  1032 2339  1104 2246  1140 2158  1217 2134
  03  1236 2145  1218 2222  1139 2258  1045 2334  0959 0007  0931 0037  0934 0047  1000 0025  1033 2337  1105 2244  1142 2157  1218 2134
  04  1236 2146  1217 2224  1137 2259  1044 2335  0957 0008  0930 0038  0934 0047  1001 0024  1034 2335  1106 2243  1143 2156  1219 2133
  05  1236 2147  1216 2225  1135 2300  1042 2336  0956 0009  0930 0039  0935 0046  1002 0022  1035 2334  1107 2241  1144 2155  1220 2133
  06  1235 2148  1214 2226  1134 2302  1040 2337  0955 0010  0930 0039  0935 0046  1003 0021  1036 2332  1108 2239  1145 2153  1221 2133
  07  1235 2149  1213 2227  1132 2303  1039 2338  0954 0011  0929 0040  0936 0046  1004 0020  1037 2330  1109 2238  1147 2152  1222 2133
  08  1235 2150  1212 2229  1130 2304  1037 2340  0952 0012  0929 0041  0937 0045  1005 0019  1038 2328  1111 2236  1148 2151  1222 2133
  09  1235 2151  1211 2230  1129 2305  1035 2341  0951 0013  0929 0041  0937 0045  1006 0017  1039 2327  1112 2234  1149 2150  1223 2133
  10  1235 2153  1210 2231  1127 2306  1034 2342  0950 0014  0929 0042  0938 0045  1007 0016  1040 2325  1113 2233  1150 2149  1224 2133
  11  1234 2154  1208 2233  1125 2307  1032 2343  0949 0015  0929 0042  0939 0044  1008 0015  1041 2323  1114 2231  1152 2148  1225 2133
  12  1234 2155  1207 2234  1124 2309  1030 2344  0948 0016  0928 0043  0940 0044  1010 0013  1042 2321  1115 2229  1153 2147  1226 2133
  13  1234 2156  1206 2235  1122 2310  1029 2345  0947 0018  0928 0043  0940 0043  1011 0012  1044 2320  1116 2228  1154 2146  1227 2133
  14  1233 2157  1204 2237  1120 2311  1027 2346  0946 0019  0928 0044  0941 0043  1012 0010  1045 2318  1117 2226  1155 2145  1228 2134
  15  1233 2158  1203 2238  1118 2312  1025 2347  0945 0020  0928 0044  0942 0042  1013 0009  1046 2316  1119 2224  1157 2144  1228 2134
  16  1232 2159  1202 2239  1117 2313  1024 2349  0944 0021  0928 0045  0943 0041  1014 0008  1047 2314  1120 2223  1158 2143  1229 2134
  17  1232 2201  1200 2240  1115 2314  1022 2350  0943 0022  0928 0045  0944 0041  1015 0006  1048 2313  1121 2221  1159 2142  1230 2134
  18  1231 2202  1159 2242  1113 2316  1021 2351  0942 0023  0928 0046  0945 0040  1016 0005  1049 2311  1122 2220  1200 2142  1230 2135
  19  1231 2203  1157 2243  1111 2317  1019 2352  0941 0024  0929 0046  0946 0039  1017 0003  1050 2309  1123 2218  1202 2141  1231 2135
  20  1230 2204  1156 2244  1110 2318  1017 2353  0940 0025  0929 0046  0946 0039  1018 0002  1051 2307  1125 2216  1203 2140  1231 2136
  21  1229 2205  1154 2246  1108 2319  1016 2354  0939 0026  0929 0046  0947 0038  1019 0000  1052 2305  1126 2215  1204 2139  1232 2136
  21                                                                                    2358                                            
  22  1229 2207  1153 2247  1106 2320  1014 2355  0938 0027  0929 0047  0948 0037  1020 2357  1053 2304  1127 2213  1205 2139  1233 2137
  23  1228 2208  1151 2248  1105 2321  1013 2357  0937 0028  0929 0047  0949 0036  1021 2355  1054 2302  1128 2212  1206 2138  1233 2137
  24  1227 2209  1150 2249  1103 2323  1011 2358  0937 0029  0930 0047  0950 0035  1022 2354  1055 2300  1129 2210  1208 2137  1233 2138
  25  1227 2211  1148 2251  1101 2324  1010 2359  0936 0030  0930 0047  0951 0034  1023 2352  1056 2258  1131 2209  1209 2137  1234 2138
  26  1226 2212  1147 2252  1059 2325  1008       0935 0030  0930 0047  0952 0033  1024 2350  1057 2257  1132 2208  1210 2136  1234 2139
  27  1225 2213  1145 2253  1058 2326  1007 0000  0935 0031  0931 0047  0953 0032  1026 2349  1058 2255  1133 2206  1211 2136  1234 2140
  28  1224 2214  1143 2254  1056 2327  1006 0001  0934 0032  0931 0047  0954 0031  1027 2347  1100 2253  1134 2205  1212 2135  1235 2140
  29  1223 2216             1054 2328  1004 0002  0933 0033  0932 0047  0955 0030  1028 2346  1101 2251  1135 2203  1213 2135  1235 2141
  30  1222 2217             1052 2329  1003 0003  0933 0034  0932 0047  0956 0029  1029 2344  1102 2250  1137 2202  1214 2135  1235 2142
  31  1221 2218             1051 2331             0932 0035             0957 0028  1030 2342             1138 2201             1235 2143
  '''
  
  _HIGH_LATITUDE_SUN_TABLE = '''
               o  ,    o  ,                                                                              Astronomical Applications Dept.
  Location:  000 00, N80 00                          Rise and Set for the Sun for 2015                   U. S. Naval Observatory        
                                                                                                         Washington, DC  20392-5420     
                                                              Universal Time                                                            
                                                                                                                                        
                                                                                                                                        
         Jan.       Feb.       Mar.       Apr.       May        June       July       Aug.       Sept.      Oct.       Nov.       Dec.  
  Day Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set
       h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m
  01  ---- ----  ---- ----  0903 1525  0359 2016  **** ****  **** ****  **** ****  **** ****  0129 2214  0641 1655  ---- ----  ---- ----
  02  ---- ----  ---- ----  0851 1536  0348 2027  **** ****  **** ****  **** ****  **** ****  0149 2156  0650 1645  ---- ----  ---- ----
  03  ---- ----  ---- ----  0840 1547  0337 2037  **** ****  **** ****  **** ****  **** ****  0206 2140  0659 1636  ---- ----  ---- ----
  04  ---- ----  ---- ----  0829 1558  0326 2049  **** ****  **** ****  **** ****  **** ****  0221 2126  0708 1626  ---- ----  ---- ----
  05  ---- ----  ---- ----  0818 1608  0314 2100  **** ****  **** ****  **** ****  **** ****  0235 2112  0717 1616  ---- ----  ---- ----
  06  ---- ----  ---- ----  0808 1618  0302 2113  **** ****  **** ****  **** ****  **** ****  0248 2100  0726 1607  ---- ----  ---- ----
  07  ---- ----  ---- ----  0758 1628  0249 2126  **** ****  **** ****  **** ****  **** ****  0300 2048  0736 1557  ---- ----  ---- ----
  08  ---- ----  ---- ----  0748 1638  0235 2140  **** ****  **** ****  **** ****  **** ****  0311 2036  0746 1546  ---- ----  ---- ----
  09  ---- ----  ---- ----  0738 1647  0221 2155  **** ****  **** ****  **** ****  **** ****  0322 2025  0755 1536  ---- ----  ---- ----
  10  ---- ----  ---- ----  0728 1656  0205 2213  **** ****  **** ****  **** ****  **** ****  0333 2014  0806 1525  ---- ----  ---- ----
  11  ---- ----  ---- ----  0718 1706  0147 2233  **** ****  **** ****  **** ****  **** ****  0343 2003  0816 1514  ---- ----  ---- ----
  12  ---- ----  ---- ----  0709 1715  0126 2301  **** ****  **** ****  **** ****  **** ****  0353 1953  0827 1503  ---- ----  ---- ----
  13  ---- ----  ---- ----  0659 1724  0058       **** ****  **** ****  **** ****  **** ****  0403 1943  0839 1451  ---- ----  ---- ----
  14  ---- ----  ---- ----  0650 1732  **** ****  **** ****  **** ****  **** ****  **** ****  0413 1933  0851 1439  ---- ----  ---- ----
  15  ---- ----  ---- ----  0641 1741  **** ****  **** ****  **** ****  **** ****  **** ****  0422 1923  0903 1426  ---- ----  ---- ----
  16  ---- ----  ---- ----  0632 1750  **** ****  **** ****  **** ****  **** ****  **** ****  0431 1913  0917 1412  ---- ----  ---- ----
  17  ---- ----  ---- ----  0622 1759  **** ****  **** ****  **** ****  **** ****  **** ****  0440 1904  0931 1357  ---- ----  ---- ----
  18  ---- ----  ---- ----  0613 1808  **** ****  **** ****  **** ****  **** ****  **** ****  0449 1854  0948 1340  ---- ----  ---- ----
  19  ---- ----  ---- ----  0604 1816  **** ****  **** ****  **** ****  **** ****  **** ****  0458 1845  1006 1321  ---- ----  ---- ----
  20  ---- ----  ---- ----  0555 1825  **** ****  **** ****  **** ****  **** ****  **** ****  0507 1835  1029 1258  ---- ----  ---- ----
  21  ---- ----  1121 1309  0546 1834  **** ****  **** ****  **** ****  **** ****  **** ****  0515 1826  1102 1224  ---- ----  ---- ----
  22  ---- ----  1052 1337  0536 1843  **** ****  **** ****  **** ****  **** ****  **** ****  0524 1817  ---- ----  ---- ----  ---- ----
  23  ---- ----  1031 1359  0527 1851  **** ****  **** ****  **** ****  **** ****  **** ****  0532 1808  ---- ----  ---- ----  ---- ----
  24  ---- ----  1012 1417  0518 1900  **** ****  **** ****  **** ****  **** ****  **** ****  0541 1759  ---- ----  ---- ----  ---- ----
  25  ---- ----  0956 1433  0508 1909  **** ****  **** ****  **** ****  **** ****  **** ****  0550 1750  ---- ----  ---- ----  ---- ----
  26  ---- ----  0942 1447  0459 1918  **** ****  **** ****  **** ****  **** ****  **** ****  0558 1741  ---- ----  ---- ----  ---- ----
  27  ---- ----  0928 1501  0449 1928  **** ****  **** ****  **** ****  **** ****  **** ****  0607 1731  ---- ----  ---- ----  ---- ----
  28  ---- ----  0915 1513  0439 1937  **** ****  **** ****  **** ****  **** ****  **** ****  0615 1722  ---- ----  ---- ----  ---- ----
  29  ---- ----             0429 1946  **** ****  **** ****  **** ****  **** ****  **** ****  0624 1713  ---- ----  ---- ----  ---- ----
  30  ---- ----             0419 1956  **** ****  **** ****  **** ****  **** ****       2301  0632 1704  ---- ----  ---- ----  ---- ----
  31  ---- ----             0409 2006             **** ****             **** ****  0102 2235             ---- ----             ---- ----
  
  (**** object continuously above horizon)                                                      (---- object continuously below horizon)
  '''
  
  _ZERO_LAT_LON_SUN_TABLE = '''
               o  ,    o  ,                                                                              Astronomical Applications Dept.
  Location:  000 00,  00 00                          Rise and Set for the Sun for 2000                   U. S. Naval Observatory        
                                                                                                         Washington, DC  20392-5420     
                                                              Universal Time                                                            
                                                                                                                                        
                                                                                                                                        
         Jan.       Feb.       Mar.       Apr.       May        June       July       Aug.       Sept.      Oct.       Nov.       Dec.  
  Day Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set
       h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m
  01  0600 1807  0610 1817  0609 1816  0601 1807  0554 1800  0554 1801  0600 1808  0603 1810  0557 1803  0546 1753  0540 1747  0545 1753
  02  0600 1808  0610 1817  0609 1815  0600 1807  0554 1800  0554 1802  0600 1808  0603 1810  0556 1803  0546 1752  0540 1747  0546 1753
  03  0600 1808  0610 1817  0609 1815  0600 1806  0553 1800  0555 1802  0601 1808  0603 1810  0556 1802  0546 1752  0540 1747  0546 1754
  04  0601 1808  0610 1817  0608 1815  0600 1806  0553 1800  0555 1802  0601 1808  0603 1809  0556 1802  0545 1752  0540 1747  0547 1754
  05  0601 1809  0610 1817  0608 1815  0559 1806  0553 1800  0555 1802  0601 1808  0603 1809  0555 1802  0545 1752  0540 1747  0547 1754
  06  0602 1809  0611 1818  0608 1814  0559 1806  0553 1800  0555 1802  0601 1808  0602 1809  0555 1801  0545 1751  0540 1747  0547 1755
  07  0602 1810  0611 1818  0608 1814  0559 1805  0553 1800  0555 1803  0601 1809  0602 1809  0555 1801  0544 1751  0540 1747  0548 1755
  08  0603 1810  0611 1818  0607 1814  0558 1805  0553 1800  0555 1803  0602 1809  0602 1809  0554 1801  0544 1751  0540 1747  0548 1756
  09  0603 1811  0611 1818  0607 1814  0558 1805  0553 1800  0556 1803  0602 1809  0602 1809  0554 1800  0544 1750  0540 1747  0549 1756
  10  0604 1811  0611 1818  0607 1813  0558 1805  0553 1800  0556 1803  0602 1809  0602 1809  0554 1800  0544 1750  0540 1747  0549 1757
  11  0604 1811  0611 1818  0607 1813  0558 1804  0553 1800  0556 1803  0602 1809  0602 1809  0553 1800  0543 1750  0541 1748  0550 1757
  12  0604 1812  0611 1818  0606 1813  0557 1804  0553 1800  0556 1804  0602 1809  0602 1808  0553 1759  0543 1750  0541 1748  0550 1758
  13  0605 1812  0611 1818  0606 1813  0557 1804  0553 1800  0556 1804  0602 1809  0601 1808  0553 1759  0543 1749  0541 1748  0551 1758
  14  0605 1813  0611 1818  0606 1812  0557 1804  0553 1800  0557 1804  0602 1809  0601 1808  0552 1759  0543 1749  0541 1748  0551 1759
  15  0606 1813  0611 1818  0606 1812  0557 1803  0553 1800  0557 1804  0602 1810  0601 1808  0552 1758  0542 1749  0541 1748  0552 1759
  16  0606 1813  0611 1818  0605 1812  0556 1803  0553 1800  0557 1804  0603 1810  0601 1808  0551 1758  0542 1749  0541 1748  0552 1800
  17  0606 1814  0611 1817  0605 1812  0556 1803  0553 1800  0557 1805  0603 1810  0601 1807  0551 1758  0542 1749  0541 1749  0553 1800
  18  0607 1814  0611 1817  0605 1811  0556 1803  0553 1800  0558 1805  0603 1810  0600 1807  0551 1757  0542 1748  0542 1749  0553 1801
  19  0607 1814  0611 1817  0604 1811  0556 1802  0553 1800  0558 1805  0603 1810  0600 1807  0550 1757  0542 1748  0542 1749  0554 1801
  20  0607 1814  0610 1817  0604 1811  0556 1802  0553 1800  0558 1805  0603 1810  0600 1807  0550 1757  0541 1748  0542 1749  0554 1802
  21  0608 1815  0610 1817  0604 1810  0555 1802  0553 1800  0558 1805  0603 1810  0600 1806  0550 1756  0541 1748  0542 1750  0554 1802
  22  0608 1815  0610 1817  0604 1810  0555 1802  0553 1800  0558 1806  0603 1810  0559 1806  0549 1756  0541 1748  0543 1750  0555 1803
  23  0608 1815  0610 1817  0603 1810  0555 1802  0553 1800  0559 1806  0603 1810  0559 1806  0549 1755  0541 1748  0543 1750  0555 1803
  24  0608 1816  0610 1817  0603 1809  0555 1801  0553 1800  0559 1806  0603 1810  0559 1806  0549 1755  0541 1748  0543 1750  0556 1804
  25  0609 1816  0610 1816  0603 1809  0555 1801  0553 1801  0559 1806  0603 1810  0559 1805  0548 1755  0541 1747  0543 1751  0556 1804
  26  0609 1816  0610 1816  0602 1809  0554 1801  0553 1801  0559 1807  0603 1810  0558 1805  0548 1754  0541 1747  0544 1751  0557 1805
  27  0609 1816  0610 1816  0602 1809  0554 1801  0554 1801  0559 1807  0603 1810  0558 1805  0548 1754  0540 1747  0544 1751  0557 1805
  28  0609 1816  0609 1816  0602 1808  0554 1801  0554 1801  0600 1807  0603 1810  0558 1804  0547 1754  0540 1747  0544 1752  0558 1805
  29  0609 1817  0609 1816  0601 1808  0554 1801  0554 1801  0600 1807  0603 1810  0558 1804  0547 1753  0540 1747  0545 1752  0558 1806
  30  0610 1817             0601 1808  0554 1801  0554 1801  0600 1807  0603 1810  0557 1804  0547 1753  0540 1747  0545 1752  0559 1806
  31  0610 1817             0601 1807             0554 1801             0603 1810  0557 1803             0540 1747             0559 1807
  '''
  
  _EAST_SOUTH_SUN_TABLE = '''
               o  ,    o  ,                                                                              Astronomical Applications Dept.
  Location: E076 30, S42 27                          Rise and Set for the Sun for 2015                   U. S. Naval Observatory        
                                                                                                         Washington, DC  20392-5420     
                                                        Zone:  4h East of Greenwich                                                     
                                                                                                                                        
                                                                                                                                        
         Jan.       Feb.       Mar.       Apr.       May        June       July       Aug.       Sept.      Oct.       Nov.       Dec.  
  Day Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set
       h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m
  01  0320 1834  0357 1818  0433 1739  0510 1646  0543 1559  0613 1530  0624 1531  0605 1556  0521 1628  0428 1700  0339 1737  0312 1814
  02  0321 1834  0358 1817  0434 1737  0511 1644  0544 1558  0614 1530  0624 1532  0604 1557  0519 1629  0427 1701  0338 1738  0312 1815
  03  0322 1834  0359 1816  0436 1736  0512 1642  0545 1556  0615 1529  0624 1532  0603 1558  0518 1630  0425 1702  0336 1739  0311 1816
  04  0323 1834  0401 1814  0437 1734  0513 1641  0546 1555  0615 1529  0624 1533  0602 1559  0516 1631  0423 1703  0335 1741  0311 1817
  05  0324 1834  0402 1813  0438 1732  0514 1639  0547 1554  0616 1528  0624 1533  0601 1600  0514 1632  0421 1704  0334 1742  0311 1818
  06  0325 1834  0403 1812  0439 1731  0515 1637  0548 1553  0617 1528  0624 1534  0559 1601  0512 1633  0420 1706  0333 1743  0311 1819
  07  0326 1834  0405 1811  0441 1729  0516 1636  0549 1551  0617 1528  0623 1535  0558 1602  0511 1634  0418 1707  0331 1745  0311 1820
  08  0327 1834  0406 1810  0442 1727  0517 1634  0550 1550  0618 1528  0623 1535  0557 1603  0509 1635  0416 1708  0330 1746  0310 1821
  09  0328 1833  0407 1808  0443 1726  0518 1632  0552 1549  0619 1527  0623 1536  0556 1604  0507 1636  0415 1709  0329 1747  0310 1822
  10  0329 1833  0409 1807  0444 1724  0520 1631  0553 1548  0619 1527  0622 1537  0554 1605  0506 1637  0413 1710  0328 1748  0310 1823
  11  0330 1833  0410 1806  0445 1722  0521 1629  0554 1547  0620 1527  0622 1537  0553 1606  0504 1639  0411 1711  0327 1750  0310 1824
  12  0331 1833  0411 1804  0447 1720  0522 1627  0555 1546  0620 1527  0621 1538  0552 1607  0502 1640  0410 1712  0326 1751  0310 1825
  13  0332 1832  0413 1803  0448 1719  0523 1626  0556 1545  0621 1527  0621 1539  0550 1608  0500 1641  0408 1714  0325 1752  0311 1826
  14  0334 1832  0414 1802  0449 1717  0524 1624  0557 1544  0621 1527  0620 1540  0549 1609  0459 1642  0406 1715  0324 1754  0311 1826
  15  0335 1831  0415 1800  0450 1715  0525 1623  0558 1543  0622 1527  0620 1541  0547 1610  0457 1643  0405 1716  0323 1755  0311 1827
  16  0336 1831  0416 1759  0451 1714  0526 1621  0559 1542  0622 1527  0619 1541  0546 1611  0455 1644  0403 1717  0322 1756  0311 1828
  17  0337 1830  0418 1757  0452 1712  0527 1619  0600 1541  0623 1527  0618 1542  0545 1612  0453 1645  0401 1718  0321 1757  0311 1828
  18  0338 1830  0419 1756  0454 1710  0529 1618  0601 1540  0623 1527  0618 1543  0543 1613  0451 1646  0400 1720  0320 1759  0312 1829
  19  0340 1829  0420 1755  0455 1708  0530 1616  0602 1539  0623 1527  0617 1544  0542 1614  0450 1647  0358 1721  0319 1800  0312 1830
  20  0341 1828  0422 1753  0456 1707  0531 1615  0603 1538  0624 1527  0616 1545  0540 1616  0448 1648  0357 1722  0318 1801  0312 1830
  21  0342 1828  0423 1752  0457 1705  0532 1613  0604 1537  0624 1528  0616 1546  0539 1617  0446 1649  0355 1723  0318 1802  0313 1831
  22  0343 1827  0424 1750  0458 1703  0533 1612  0605 1536  0624 1528  0615 1547  0537 1618  0444 1650  0354 1724  0317 1804  0313 1831
  23  0345 1826  0426 1748  0459 1701  0534 1610  0606 1536  0624 1528  0614 1547  0535 1619  0443 1651  0352 1726  0316 1805  0314 1832
  24  0346 1825  0427 1747  0500 1700  0535 1609  0606 1535  0624 1528  0613 1548  0534 1620  0441 1652  0351 1727  0316 1806  0314 1832
  25  0347 1825  0428 1745  0502 1658  0536 1607  0607 1534  0624 1529  0612 1549  0532 1621  0439 1653  0349 1728  0315 1807  0315 1833
  26  0349 1824  0429 1744  0503 1656  0537 1606  0608 1533  0625 1529  0611 1550  0531 1622  0437 1654  0348 1729  0314 1808  0316 1833
  27  0350 1823  0431 1742  0504 1654  0539 1604  0609 1533  0625 1529  0610 1551  0529 1623  0436 1656  0346 1731  0314 1810  0316 1833
  28  0351 1822  0432 1741  0505 1653  0540 1603  0610 1532  0625 1530  0609 1552  0527 1624  0434 1657  0345 1732  0313 1811  0317 1834
  29  0353 1821             0506 1651  0541 1602  0611 1532  0625 1530  0608 1553  0526 1625  0432 1658  0343 1733  0313 1812  0318 1834
  30  0354 1820             0507 1649  0542 1600  0612 1531  0625 1531  0607 1554  0524 1626  0430 1659  0342 1734  0312 1813  0318 1834
  31  0355 1819             0508 1648             0612 1531             0606 1555  0523 1627             0340 1736             0319 1834
  '''
  