Interface TimeValue
- All Superinterfaces:
Value
- All Known Implementing Classes:
TimeValueImpl
before
or
after
the given time point an event might have
occurred.
Time points cannot describe durations (which are quantities), recurring events ("1st of May"), or time spans ( "He reigned from 1697 to 1706, i.e., during every moment of that time span" ). Intervals expressed by times always encode uncertainty ("He died in the year 546 BCE, i.e., in some moment within that interval").
The main time point of the value generally refers to the proleptic Gregorian calendar. However, if dates are imprecise (like "Jan 1512" or even "1200") then one cannot convert this reliably and Wikidata will just keep the value as entered.
"Y0K issue": Neither the Gregorian nor the Julian calendar assume a year 0, i.e., the year 1 BCE was followed by 1 CE in these calendars. See http://en.wikipedia.org/wiki/Year_zero. Wikibase internally uses the year 0. This is the same as ISO-8601, where 1 BCE is represented as "0000". However, note that XML Schema dates (1.0 and 2.0) do not have a year 0, so in their case 1BCE is represented as "-1". Understanding the difference is relevant for computing leap years, for computing temporal intervals, and for exporting data.
Timezone information is to be given in the form of a positive or negative
offset with respect to UTC, measured in minutes. This information specifies
the timezone that the time should be displayed in when shown to a user. The
recorded time point is in UTC, so timezone can be ignored for comparing
values. See getTimezoneOffset()
.
- Author:
- Markus Kroetzsch
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
IRI of the proleptic Gregorian calendar; often used to specify the calendar modelstatic final String
IRI of the proleptic Julian calendar; often used to specify the calendar modelstatic final byte
Precision constant for dates that are precise to 100,000 years.static final byte
Precision constant for dates that are precise to 100 million years.static final byte
Precision constant for dates that are precise to 100 years.static final byte
Precision constant for dates that are precise to 10,000 years.static final byte
Precision constant for dates that are precise to 10 million years.static final byte
Precision constant for dates that are precise to 10^9 years.static final byte
Precision constant for dates that are precise to 1,000 years.static final byte
Precision constant for dates that are precise to 1 million years.static final byte
Precision constant for dates that are precise to the day.static final byte
Precision constant for dates that are precise to the decade.static final byte
Precision constant for dates that are precise to the hour.static final byte
Precision constant for dates that are precise to the minute.static final byte
Precision constant for dates that are precise to the month.static final byte
Precision constant for dates that are precise to the second.static final byte
Precision constant for dates that are precise to the year. -
Method Summary
Modifier and TypeMethodDescriptionint
Get a tolerance value that specifies how much later in time the value could at most be, measured as a multiple ofprecision
.int
Get a tolerance value that specifies how much earlier in time the value could at most be, measured as a multiple ofprecision
.byte
getDay()
Get the day stored for this date.byte
getHour()
Get the hour stored for this date.byte
Get the minute stored for this date.byte
getMonth()
Get the month stored for this date.byte
Get the precision hint of this date.Get the IRI of the preferred calendar model that should be used to display this date (and that was presumably used when entering it).Get theItemIdValue
of the preferred calendar model that should be used to display this date (and that was presumably used when entering it).byte
Get the seconds stored for this date.int
Get the offset in minutes from UTC that should be applied when displaying this time to users.long
getYear()
Get the year stored for this date.Convert the value to the Gregorian calendar, if possible.
-
Field Details
-
CM_GREGORIAN_PRO
IRI of the proleptic Gregorian calendar; often used to specify the calendar model- See Also:
-
CM_JULIAN_PRO
IRI of the proleptic Julian calendar; often used to specify the calendar model- See Also:
-
PREC_SECOND
static final byte PREC_SECONDPrecision constant for dates that are precise to the second.- See Also:
-
PREC_MINUTE
static final byte PREC_MINUTEPrecision constant for dates that are precise to the minute.- See Also:
-
PREC_HOUR
static final byte PREC_HOURPrecision constant for dates that are precise to the hour.- See Also:
-
PREC_DAY
static final byte PREC_DAYPrecision constant for dates that are precise to the day.- See Also:
-
PREC_MONTH
static final byte PREC_MONTHPrecision constant for dates that are precise to the month.- See Also:
-
PREC_YEAR
static final byte PREC_YEARPrecision constant for dates that are precise to the year.- See Also:
-
PREC_DECADE
static final byte PREC_DECADEPrecision constant for dates that are precise to the decade.- See Also:
-
PREC_100Y
static final byte PREC_100YPrecision constant for dates that are precise to 100 years.- See Also:
-
PREC_1KY
static final byte PREC_1KYPrecision constant for dates that are precise to 1,000 years.- See Also:
-
PREC_10KY
static final byte PREC_10KYPrecision constant for dates that are precise to 10,000 years.- See Also:
-
PREC_100KY
static final byte PREC_100KYPrecision constant for dates that are precise to 100,000 years.- See Also:
-
PREC_1MY
static final byte PREC_1MYPrecision constant for dates that are precise to 1 million years.- See Also:
-
PREC_10MY
static final byte PREC_10MYPrecision constant for dates that are precise to 10 million years.- See Also:
-
PREC_100MY
static final byte PREC_100MYPrecision constant for dates that are precise to 100 million years.- See Also:
-
PREC_1GY
static final byte PREC_1GYPrecision constant for dates that are precise to 10^9 years.- See Also:
-
-
Method Details
-
getYear
long getYear()Get the year stored for this date. Years in Wikibase can be 0; see "Y0K" issue in the interface documentation.- Returns:
- year number
-
getMonth
byte getMonth()Get the month stored for this date. It will be a number from 1 to 12.- Returns:
- month number
-
getDay
byte getDay()Get the day stored for this date. It will be a number from 1 to 31.- Returns:
- day number
-
getHour
byte getHour()Get the hour stored for this date. It will be a number from 0 to 23.- Returns:
- hour number
-
getMinute
byte getMinute()Get the minute stored for this date. It will be a number from 0 to 59.- Returns:
- minute number
-
getSecond
byte getSecond()Get the seconds stored for this date. The value will be between 0 and 60 (inclusive) to account for leap seconds. Implementations are not expected to validate leap seconds but they should provide consistent ordering: the time 23:59:60 is always before 00:00:00 on the next day.- Returns:
- second number
-
getPreferredCalendarModel
String getPreferredCalendarModel()Get the IRI of the preferred calendar model that should be used to display this date (and that was presumably used when entering it). This is usuallyCM_GREGORIAN_PRO
orCM_JULIAN_PRO
.- Returns:
- IRI of the preferred calendar model
-
getPreferredCalendarModelItemId
ItemIdValue getPreferredCalendarModelItemId()Get theItemIdValue
of the preferred calendar model that should be used to display this date (and that was presumably used when entering it).- Throws:
IllegalArgumentException
- if the calendar model is not a valid item IRI
-
getPrecision
byte getPrecision()Get the precision hint of this date. The return value will be in the range ofPREC_DAY
, ...,PREC_1GY
.- Returns:
- precision hint for this date
-
getTimezoneOffset
int getTimezoneOffset()Get the offset in minutes from UTC that should be applied when displaying this time to users. The recorded time point is always in UTC, so the timezone can be ignored for comparing values. The offset should be added to the given time to obtain the intended local value. For example, an offset of +60 and a time of 10:45:00 should be displayed as 11:45:00 to the user (ideally with some indication of the shift; time zone abbreviations like "CET" could be used when matching the given offset, but the offset might also have values that do not correspond to any current or modern time zone). Therefore positive offsets are used for timezones that to the east of the prime meridian.- Returns:
- minute number (positive or negative)
-
getBeforeTolerance
int getBeforeTolerance()Get a tolerance value that specifies how much earlier in time the value could at most be, measured as a multiple ofprecision
. The value is a non-negative integer.For example, for the date 2007-05-12T10:45:00 with precision
PREC_MONTH
, a before-tolerance value of 3 means that the earliest possible time of this event could have been 2007-02-12T10:45:00. This information about the uncertainty of time points can be taken into account in query answering, but simplified implementations can also ignore it and work with the given (exact) time point instead. If not set specifically by the user, the before-tolerance value should be 0, i.e., the given time point marks the earliest possible time.This boundary is inclusive. For example, a date 2014-02-17T00:00:00 with precision
PREC_DAY
and before-tolerance value 1 specifies a time that between 2014-02-17T00:00:00- Returns:
- a non-negative integer tolerance measured in terms of precision
- See Also:
-
getAfterTolerance
int getAfterTolerance()Get a tolerance value that specifies how much later in time the value could at most be, measured as a multiple ofprecision
. The value is a positive integer.For example, for the date 2007-05-12T10:45:00 with precision
PREC_MONTH
, an after-tolerance value of 2 means that the latest possible time of this event could have been strictly before 2007-07-12T10:45:00. This information about the uncertainty of time points can be taken into account in query answering, but simplified implementations can also ignore it and work with the given (exact) time point instead. If not set specifically by the user, the after-tolerance value should be 1, i.e., the interval of uncertainty is exactly the length given by precision. However, because most (if not all) other known implementations of the data model got this detail wrong and use 0 instead, we are also using 0 as a default value. This issue is tracked at https://phabricator.wikimedia.org/T194869.The boundary is exclusive. For example, a date 2013-02-01T00:00:00 with precision
PREC_MONTH
and after-tolerance value 1 and before-tolerance value of 0 specifies a time "sometime in February 2013", but it excludes any time in March 2013. The after-tolerance must not be 0 (which would make no sense if the bound is exclusive, and which is not needed since precision up to a single second can be specified anyway).- Returns:
- a non-zero, positive integer tolerance measured in terms of precision
- See Also:
-
toGregorian
TimeValue toGregorian()Convert the value to the Gregorian calendar, if possible. This conversion can fail if not enough information is available (for example, we need at least day precision to convert from Julian to Gregorian).- Returns:
- a TimeValue that uses the Gregorian calendar, or null if the conversion failed.
-