All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.time4j.scale.TimeScale Maven / Gradle / Ivy

There is a newer version: 4.38
Show newest version
/*
 * -----------------------------------------------------------------------
 * Copyright © 2013-2014 Meno Hochschild, 
 * -----------------------------------------------------------------------
 * This file (TimeScale.java) is part of project Time4J.
 *
 * Time4J is free software: You can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 2.1 of the License, or
 * (at your option) any later version.
 *
 * Time4J is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with Time4J. If not, see .
 * -----------------------------------------------------------------------
 */

package net.time4j.scale;


/**
 * 

Defines some time scales for usage both in civil life and in science.

* *

Any conversion is usually not bijective. That means that for example * an UTC-timestamp can be mapped in a unique way to UT1, GPS or TAI (provided * that there are no negative leap seconds) but in reverse not. More important: * Conversions often happen in millisecond-precision or worse so they are * more or less like approximation procedures.

* * @author Meno Hochschild */ /*[deutsch] *

Definiert verschiedene Zeitskalen sowohl zur Verwendung im zivilen * Alltag als auch in der Wissenschaft.

* *

Konvertierverfahren sind im allgemeinen nicht bijektiv. Das bedeutet, * daß z.B. zwar einem UTC-Zeitpunkt meist eindeutig ein UT1-, GPS- oder * TAI-Zeitpunkt zugeordnet werden kann (positive UTC-Schaltsekunden * vorausgesetzt), umgekehrt aber nicht. Noch wichtiger: Konversionen * erfolgen oft in Millisekundengenauigkeit (oder schlechter), sind * also grundsätzlich Näherungsverfahren.

* * @author Meno Hochschild */ public enum TimeScale { //~ Statische Felder/Initialisierungen -------------------------------- /** *

Counts the seconds relative to UNIX-epoch 1970-01-01T00:00:00Z * which is two years before UTC-epoch.

* *

Leap seconds are not counted but ignored according to POSIX-standard. * Before the UTC-epoch 1972-01-01 the second is effectively defined as * the 86400th part of mean solar day (UT1). After this UTC-epoch the * POSIX-second is with the exception of leap second events equal to * the SI-second based on atomic clocks, but in long term effectively * similar to the UT1-second based on mean solar time.

* *

POSIX is more present in computer realms than UTC although there is * no precision in calculation of SI-seconds (a bug of UNIX-specification). * The definition of the reference timezone on zero meridian of Greenwich * is the same as in UTC.

* *

During a leap second the transformation of POSIX-time to an * UTC-timestamp is not defined. An old convention in the UNIX world * tries to reset the clock by one second AFTER the leap second, so * effectively mapping the leap second to the next day despite of * its obvious written form as last second of current day (see also * Wikipedia-page). * The current description of POSIX-time * explicitly states however that the relation between the current day * time and the current POSIX-value is not specified and dependent on * the implementation. Time4J maps the leap second to the current day * as the last second. This corresponds to an UNXI-variation where a * clock is reset at the begin of a leap second instead of at the end * of a leap second.

*/ /*[deutsch] *

Zählt die Sekunden relativ zur UNIX-Epoche 1970-01-01T00:00:00Z, * die zwei Jahre vor der UTC-Epoche liegt.

* *

Schaltsekunden werden nicht mitgezählt, sondern gemäß * dem POSIX-Standard ignoriert. Vor der UTC-Epoche 1972-01-01 wird die * Sekunde effektiv als der 86400-te Teil des mittleren Sonnentags * interpretiert (UT1). Danach ist die POSIX-Sekunde mit der Ausnahme von * Schaltsekunden im Kurzzeit-Bereich die SI-Sekunde auf Atomuhrzeitbasis, * auf lange Sicht aber effektiv als UT1-Sekunde auf Basis der mittleren * Sonnenzeit zu interpretieren.

* *

POSIX ist im Computer-Bereich präsenter als UTC, auch wenn von * einer Genauigkeit in der Berechnung von SI-Sekunden nicht mehr gesprochen * werden kann (ein Bug der UNIX-Spezifikation). Die Definition der * Referenzzeitzone auf dem Null-Meridian von Greenwich ist wie in UTC * gegeben.

* *

Während einer Schaltsekunde ist die Transformation einer * POSIX-Zeit zu einem UTC-Zeitstempel im Prinzip undefiniert. * Eine alte Konvention in der UNIX-Welt versucht jedoch, erst am Ende * einer Schaltsekunde die zugehörige Uhr um eine Sekunde * zurückzusetzen, rechnet also die Schaltsekunde selbst entgegen * seiner offensichtlichen Schreibform zum Folgetag (so auch gelistet im * Wikipedia-Artikel). * Die aktuelle Beschreibung der POSIX-Zeit * sagt jedoch ausdrücklich, daß die Beziehung zwischen der * aktuellen Tageszeit und dem aktuellen POSIX-Wert unspezifiert und * implementierungsabhängig ist. Time4J rechnet die Schaltsekunde * immer zu dem Tag, der sie als letzte Sekunde enthält. Das * entspricht einer UNIX-Variante, in der eine Uhr zu Beginn statt * zum Ende einer Schaltsekunde zurückgesetzt wird.

*/ POSIX, /** *

Counts the seconds relative to UTC-epoch which started at * midnight on the calendar days 1972-01-01 (1972-01-01T00:00:00Z) * inclusive all leap seconds.

* *

Time4J handles all {@code UniversalTime}-timestamps before * the UTC-epoch as mean solar time (UT1). The second is therefore * defined as the 86400th part of the mean solar day before 1972. * After the UTC-epoch 1972-01-01 the second is always the * SI-second based on atomic clocks.

* * @see UniversalTime */ /*[deutsch] *

Zählt die Sekunden relativ zur UTC-Epoche, die zu Mitternacht * des Datums 1972-01-01 begann (1972-01-01T00:00:00Z in der UTC-Zeitzone), * inklusive aller Schaltsekunden.

* *

Time4J behandelt in allen {@code UniversalTime}-Implementierungen * Zeitangaben vor der UTC-Epoche rückwirkend als mittlere Sonnenzeit * UT1. Vor der UTC-Epoche 1972-01-01 wird also die Sekunde als der 86400-te * Teil des mittleren Sonnentags definiert. Danach ist die Sekunde stets * die SI-Sekunde auf Atomuhrzeitbasis.

* * @see UniversalTime */ UTC, /** *

International atomic time which is based on the SI-seconds of an * atomic clock and presents a continuous scale relative to 1972-01-01.

* *

There is no second which is interpreted respective labelled as * leapsecond. Hence this scale is decoupled from civil day and only * usefule in a scientific context. As consequence the astronomic day has * no meaning on this scale.

* *

Strictly spoken, the scale definition of TAI is a statistical * approximation to the definition of an SI-second because the average of * around 250 atomic clocks worldwide is used. But the deviations are * in picoseconds or smaller which is not in the focus of this API.

* *

Although TAI knows historical ancestors already since 1958 * Time4J only supports TAI from UTC-epoch 1972-01-01. First to note * the SI-second was introduced in year 1967. Second, the nowadays * used TAI-scale had got its name on a conference in year 1971, third * to note, the TAI-ancestors were still directly synchronized with * UT2 hence had still got a vague astronomical reference.. At the * calendar date 1972-01-01 the difference between TAI and UTC was * defined as exactly 10 seconds (TAI = UTC + 10). This difference is * fixed for all timestamps in epoch seconds because both TAI and UTC * counts in pure SI-seconds. But note: If TAI and UTC are resolved * to an element-oriented notation (YYYY-MM-DD HH:MM:SS) then the * difference between TAI and UTC increases with every inserted * leap second because of the different labelling. A TAI day does not * know leap seconds. In the year 2013 this difference between a TAI * day and an UTC day has increased to 35 seconds.

*/ /*[deutsch] *

Internationale Atomuhrzeit, die auf den SI-Sekunden einer Atomuhr * basiert und eine monoton fortlaufende Skala relativ zu 1972-01-01 * darstellt.

* *

Es werden also keine Sekunden als Schaltsekunden interpretiert. * Somit ist diese Skala vom zivilen Alltag abgekoppelt und nur im * Wissenschaftsbetrieb von Bedeutung. Konsequent hat der astronomische * Tag in dieser Skala keine Bedeutung.

* *

Streng genommen ist auch das Skalenmaß von TAI nur eine * statistische Annäherung an die Definition einer SI-Sekunde als * einer bestimmten Anzahl von Cäsium-Atomschwingungen, denn es wird * über ca. 250 Atomuhren weltweit gemittelt. Jedoch liegt die * Abweichung im Bereich von Pikosekunden, was nicht im Fokus dieses API * liegt.

* *

Obwohl Vorgänger von TAI schon seit 1958 bekannt sind, erlaubt * Time4J TAI-Angaben nur ab der UTC-Epoche 1972-01-01. Erstens wurde die * SI-Sekunde erst ab 1967 definiert, zweitens bekam die heutige TAI-Skala * ihren Namen auf einer Konferenz im Jahre 1971, drittens waren die * Vorgänger von TAI noch direkt mit UT2 synchronisiert, hatten * also noch einen etwas vagen astronomischen Bezug. Zum Datum 1972-01-01 * wurde der Versatz zwischen TAI und UTC genau auf 10 Sekunden festgelegt * (TAI = UTC + 10). Diese Differenz gilt fest für alle Zeitangaben * in Epochensekunden, weil sowohl TAI als auch UTC in reinen SI-Sekunden * zählen. Aber: Werden TAI und UTC zu Zeitstempeln in einer * feldorientierten Notation (YYYY-MM-DD HH:MM:SS) aufgelöst, * dann ändert sich der Versatz seit 1972 laufend mit jeder * eingefügten Schaltsekunde, weil ein TAI-Tag keine Schaltsekunden * kennt. Im Jahr 2013 ist dieser Versatz zwischen TAI-Tag und UTC-Tag * auf 35 Sekunden angewachsen.

*/ TAI, /** *

Is used by the GPS-navigation system and counts SI-seconds relative * to the start of GPS.

* *

GPS was introduced on 6th of January 1980. All earlier timestamps * are not supported by Time4J. Between 1972 and 1980 there were 9 * leap seconds therefore following relation holds leaving aside the * different epoch reference: GPS + delta = UTC - 9 = TAI - 19 where * delta stands for the POSIX-difference between 1972-01-01 and * 1980-01-06.

* * @see #TAI */ /*[deutsch] *

Wird vom GPS-Navigationssystem verwendet und wird relativ zum Start * von GPS in SI-Sekunden gezählt.

* *

GPS wurde am 6. Januar 1980 eingeführt. Alle Zeitangaben davor * werden von Time4J mit einer Ausnahme quittiert. Zwischen 1972 und 1980 * gab es 9 Schaltsekunden, deshalb gilt abgesehen vom unterschiedlichen * Epochenbezug folgende Relation: GPS + delta = UTC - 9 = TAI - 19, wo * delta für die POSIX-Differenz zwischen 1972-01-01 und * 1980-01-06 steht.

* * @see #TAI */ GPS; // /** // *

Die Terrestrial Time ist nicht an die Erdrotation gebunden // * und ist als dynamische Zeit aus Bewegungssätzen abgeleitet // * (theoretisches Ideal).

// * // *

Ab 1991 unter Berücksichtigung der Höhe einer Atomuhr // * relativ zur Erdoberfläche (allgemeine Relativitätstheorie) // * neu definiert. Die Vorgänger ET (Ephemeris Time) und TDT // * (Terrestrial Dynamic Time) sind jedoch bis in den Millisekundenbereich // * hinein nahezu gleich. Time4J verwendet als Näherung die Formel // * TT = TDT = ET = TAI + 32,184 Sekunden.

// * // * @see #TAI // */ // TT, // // /** // *

Mittlere Sonnenzeit mit variabler erdrotationsgebundener Sekunde.

// * // *

UT1 wird häufig mit UTC verwechselt, weil Schaltsekunden selten // * auftreten und im zivilen Alltag mit seinen meist deutlich geringeren // * Anforderungen an die Genauigkeit kaum wahrnehmbar sind. Die Abweichung // * von UT1 relativ zu TT (historisch eigentlich zu ET, Differenz TT - UT1) // * wird in der Astronomie als Delta-T bezeichnet und wird laufend vom IERS // * veröffentlicht. Time4J verwendet zum Abschätzen von Delta-T // * polynomiale Ausdrücke, die auf den belgischen Astronomen Jean Meeus // * zurückgehen und kann so begrenzt zwischen UT1 und den anderen // * nicht an die Erdrotation gebundenen Zeitskalen umrechnen.

// */ // UT1; }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy