Source Code Cross Referenced for Calendar.java in  » GIS » GeoTools-2.4.1 » org » geotools » nature » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » GIS » GeoTools 2.4.1 » org.geotools.nature 
Source Cross Referenced  Class Diagram Java Document (Java Doc) 


001:        /*
002:         *    GeoTools - OpenSource mapping toolkit
003:         *    http://geotools.org
004:         *    (C) 2003-2006, GeoTools Project Managment Committee (PMC)
005:         *    (C) 2000, Institut de Recherche pour le Développement
006:         *   
007:         *    This library is free software; you can redistribute it and/or
008:         *    modify it under the terms of the GNU Lesser General Public
009:         *    License as published by the Free Software Foundation;
010:         *    version 2.1 of the License.
011:         *
012:         *    This library is distributed in the hope that it will be useful,
013:         *    but WITHOUT ANY WARRANTY; without even the implied warranty of
014:         *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015:         *    Lesser General Public License for more details.
016:         *
017:         *    NOTE: permission has been given to the JScience project (http://www.jscience.org)
018:         *          to distribute this file under BSD-like license.
019:         */
020:        package org.geotools.nature;
021:
022:        // J2SE dependencies
023:        import java.text.DateFormat;
024:        import java.text.ParseException;
025:        import java.util.Date;
026:        import java.util.TimeZone;
027:
028:        /**
029:         * Approximations de quelques calculs astronomiques relatifs aux calendriers terrestres.
030:         * Les différents cycles astronomiques (notamment le jour, le mois et l'année) ne sont pas
031:         * constants. Par exemple, la longueur de l'année tropicale (le nombre moyen de jours entre
032:         * deux équinoxes vernales) était d'environ 365,242196 jours en 1900 et devrait être d'environ
033:         * 365,242184 jours en 2100, soit un changement d'environ 1 seconde. Cette classe permet de
034:         * calculer la longueur d'une année ou d'un mois à une date spécifiée. Toutefois, il est
035:         * important de noter que les intervalles de temps calculés par les méthodes de cette classe
036:         * sont des <strong>moyennes</strong>. Pour une année en particulier, l'intervalle de temps
037:         * d'un équinoxe vernale au prochain peut s'écarter de cette moyenne de plusieurs minutes.
038:         *
039:         * <p>Les calculs de la longueur de l'année tropicale sont basés sur les travaux de Laskar (1986).
040:         * Les calculs de la longueur des mois synodiques sont basés sur les travaux de Chapront-Touze et
041:         * Chapront (1988).On peut lire plus de détails au sujet des calendrier terrestre au site
042:         * <a href="http://webexhibits.org/calendars/year-astronomy.html">http://webexhibits.org/calendars/year-astronomy.html</a> ainsi que
043:         * <a href="http://www.treasure-troves.com/astro/TropicalYear.html">http://www.treasure-troves.com/astro/TropicalYear.html</a>.</p>
044:         *
045:         * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/library/referencing/src/main/java/org/geotools/nature/Calendar.java $
046:         * @version $Id: Calendar.java 20874 2006-08-07 10:00:01Z jgarnett $
047:         * @author Martin Desruisseaux
048:         *
049:         * @since 2.1
050:         */
051:        public final class Calendar {
052:            /**
053:             * Nombre de millisecondes dans une journée. Cette constante est
054:             * utilisée pour convertir des intervalles de temps du Java en
055:             * nombre de jours.
056:             */
057:            private static double MILLIS_IN_DAY = 1000 * 60 * 60 * 24;
058:
059:            /**
060:             * Jour julien correspondant à l'époch du Java (1er janvier 1970 à minuit).
061:             * Cette constante est utilisée pour convertir des dates du Java en jour
062:             * julien.
063:             *
064:             * La valeur {@link #julianDay}   du 1er janvier 2000 00:00 GMT est 2451544.5 jours.
065:             * La valeur {@link Date#getTime} du 1er janvier 2000 00:00 GMT est 10957 jours.
066:             */
067:            private static double JULIAN_DAY_1970 = 2451544.5 - 10957;
068:
069:            /**
070:             * Interdit la création de classes {@code Cycles} par l'utilisateur.
071:             */
072:            private Calendar() {
073:            }
074:
075:            /**
076:             * Retourne le jour julien d'une date. Il ne s'agit pas du jour julien dans
077:             * une année. Ce jour julien là (nommé ainsi pour <i>Julius Scaliger</i>, et
078:             * non <i>Julius Caesar</i>)  est le nombre de jours écoulés depuis midi le
079:             * 1er janvier 4713 avant Jésus-Christ.
080:             */
081:            public static double julianDay(final Date time) {
082:                return julianDay(time.getTime());
083:            }
084:
085:            /**
086:             * Computes the {@linkplain #julianDay(Date) julian day}.
087:             *
088:             * @param time The date in milliseconds ellapsed since January 1st, 1970.
089:             */
090:            static double julianDay(final long time) {
091:                return (time / MILLIS_IN_DAY) + JULIAN_DAY_1970;
092:            }
093:
094:            /**
095:             * Retourne le nombre de siècles écoulés depuis le 1 janvier 2000 à midi.
096:             * Cette information est utilisée dans les formules de Laskar (1986) pour
097:             * calculer la longueur d'une année tropicale, ainsi que par Chapront-Touze
098:             * et Chapront (1988) pour la longueur d'un mois synodique.
099:             */
100:            static double julianCentury(final Date time) {
101:                return ((time.getTime() / MILLIS_IN_DAY) + (JULIAN_DAY_1970 - 2451545.0)) / 36525;
102:            }
103:
104:            /**
105:             * Retourne la longueur de l'année tropicale. L'année tropicale est définie comme l'intervalle
106:             * moyen entre deux équinoxes vernales (autour du 21 mars dans l'hémisphère nord). Il correspond
107:             * au cycle des saisons. Cet intervalle de temps est une <strong>moyenne</strong>. Un cycle réel
108:             * peut s'écarter de plusieurs minutes de cette moyenne. Notez aussi qu'une année tropicale
109:             * n'est pas identique à une année sidérale, qui est le temps requis par la Terre pour compléter
110:             * un orbite autour du Soleil. En l'an 2000, l'année tropicale avait une longueur d'environ
111:             * 365,2422 jours tandis que l'année sidérale avait une longueur de 365,2564 jours.
112:             */
113:            public static double tropicalYearLength(final Date time) {
114:                final double T = julianCentury(time);
115:                return 365.2421896698 + T
116:                        * (-0.00000615359 + T * (-7.29E-10 + T * (2.64E-10)));
117:            }
118:
119:            /**
120:             * Retourne la longueur du mois synodique. Le mois synodique est l'intervalle de temps moyen
121:             * entre deux conjonctions de la lune et du soleil. Il correspond au cycle des phases de la
122:             * lune. Cet intervalle de temps est une <strong>moyenne</strong>. Un cycle réel peut s'écarter
123:             * de plusieurs heures de cette moyenne.
124:             */
125:            public static double synodicMonthLength(final Date time) {
126:                final double T = julianCentury(time);
127:                return 29.5305888531 + T * (0.00000021621 + T * (-3.64E-10));
128:            }
129:
130:            /**
131:             * Affiche la longueur de l'année tropicale et du mois synodique pour une date donnée.
132:             * Cette application peut être lancée avec la syntaxe suivante:
133:             *
134:             * <pre>Calendar <var>&lt;date&gt;</var></pre>
135:             *
136:             * où <var>date</var> est un argument optionel spécifiant la date (jour, mois et année)
137:             * d'intérêt en heure universelle (UTC). Si cet argument est omis, la date et heure
138:             * actuelles seront utilisées.
139:             */
140:            public static final void main(final String[] args)
141:                    throws ParseException {
142:                final DateFormat format = DateFormat
143:                        .getDateInstance(DateFormat.SHORT);
144:                format.setTimeZone(TimeZone.getTimeZone("UTC"));
145:                final Date time = (args.length != 0) ? format.parse(args[0])
146:                        : new Date();
147:                System.out.print("Date (UTC)   : ");
148:                System.out.println(format.format(time));
149:                System.out.print("Tropical year: ");
150:                System.out.println(tropicalYearLength(time));
151:                System.out.print("Synodic month: ");
152:                System.out.println(synodicMonthLength(time));
153:            }
154:        }
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.