public class Time
extends Object
java.lang.Object | |
↳ | android.text.format.Time |
这个类在API级别22已被弃用。
改为使用GregorianCalendar
。
Calendar
和GregorianCalendar
类的替代方案。 Time类的一个实例代表以第二精度指定的时刻。 它是在struct tm之后建模的。 这个类不是线程安全的,不考虑闰秒。
这门课有许多问题,建议使用 GregorianCalendar
代替。
已知的问题:
switchTimezone(String)
on a date that cannot exist, such as a wall time that was skipped due to a DST transition, will result in a date in 1969 (i.e. -1, or 1 second before 1st Jan 1970 UTC).Constants |
|
---|---|
int |
EPOCH_JULIAN_DAY 这个时代的Julian日,即1970年1月1日的公历日。 |
int |
FRIDAY |
int |
HOUR |
int |
MINUTE |
int |
MONDAY |
int |
MONDAY_BEFORE_JULIAN_EPOCH 1969年12月29日这个时代的星期一的Julian日在公历上。 |
int |
MONTH |
int |
MONTH_DAY |
int |
SATURDAY |
int |
SECOND |
int |
SUNDAY |
int |
THURSDAY |
String |
TIMEZONE_UTC |
int |
TUESDAY |
int |
WEDNESDAY |
int |
WEEK_DAY |
int |
WEEK_NUM |
int |
YEAR |
int |
YEAR_DAY |
Fields |
|
---|---|
public boolean |
allDay 如果这是allDay事件,则为true。 |
public long |
gmtoff 以UTC为单位的偏移量,包括任何DST偏移量。 |
public int |
hour 一天中的小时[0-23] |
public int |
isDst 这一次是夏令时。 |
public int |
minute 分钟[0-59] |
public int |
month 月[0-11] |
public int |
monthDay 一个月中的某天[1-31] |
public int |
second 秒[0-61](允许2秒) |
public String |
timezone 这个时间的时区。 |
public int |
weekDay 星期几[0-6] |
public int |
year 年。 |
public int |
yearDay 一年中的某一天[0-365] |
Public constructors |
|
---|---|
Time(String timezoneId) 在由字符串参数“timezone”命名的时区中构造一个Time对象。 |
|
Time() 在默认时区中构建一个Time对象。 |
|
Time(Time other) 复制构造函数。 |
Public methods |
|
---|---|
boolean |
after(Time that) 如果此Time对象表示的时间出现在给定时间之后,则返回true。 |
boolean |
before(Time that) 如果此Time对象表示的时间在给定时间之前发生,则返回true。 |
void |
clear(String timezoneId) 清除所有值,将时区设置为给定的时区。 |
static int |
compare(Time a, Time b) 比较两个 |
String |
format(String format) 根据提供的格式字符串打印当前值。 |
String |
format2445() 格式根据RFC 2445 DATE-TIME类型。 |
String |
format3339(boolean allDay) 以RFC 3339格式返回一个字符串。 |
int |
getActualMaximum(int field) 给定其他字段的值,返回给定字段的最大可能值。 |
static String |
getCurrentTimezone() 返回当前为设备设置的时区字符串。 |
static int |
getJulianDay(long millis, long gmtoff) 计算特定时区中某个时间点的儒略日数。 |
static int |
getJulianMondayFromWeeksSinceEpoch(int week) 从该时代开始数周,并计算该周一的Julian日。 |
int |
getWeekNumber() 根据ISO 8601计算周数。 |
static int |
getWeeksSinceEpochFromJulianDay(int julianDay, int firstDayOfWeek) 返回自 |
static boolean |
isEpoch(Time time) 如果给定时间的日期是Julian日历(1970年1月1日格里历)上的时间,则返回true。 |
long |
normalize(boolean ignoreDst) 确保每个字段中的值都在范围内。 |
boolean |
parse(String s) 以RFC 2445格式或不包含“时间”字段的缩写格式解析日期时间字符串。 |
boolean |
parse3339(String s) 以RFC 3339格式解析时间。 |
void |
set(Time that) 将该值复制到此Time对象。 |
void |
set(int second, int minute, int hour, int monthDay, int month, int year) 设置字段。 |
void |
set(int monthDay, int month, int year) 设置给定字段的日期。 |
void |
set(long millis) 给定UTC毫秒,设置此Time对象中的字段。 |
long |
setJulianDay(int julianDay) 根据给定的Julian天数设置时间,该天数必须基于此Time对象中设置的相同时区。 |
void |
setToNow() 将给定时间对象的时间设置为当前时间。 |
void |
switchTimezone(String timezone) 转换此时间对象,以便表示的时间保持不变,但位于不同的时区。 |
long |
toMillis(boolean ignoreDst) 将此时间转换为毫秒。 |
String |
toString() 在YYYYMMDDTHHMMSS中返回当前时间
|
Inherited methods |
|
---|---|
From class java.lang.Object
|
int EPOCH_JULIAN_DAY
这个时代的Julian日,即1970年1月1日的公历日。
常量值:2440588(0x00253d8c)
int MONDAY_BEFORE_JULIAN_EPOCH
1969年12月29日这个时代的星期一的Julian日在公历上。
常量值:2440585(0x00253d89)
int isDst
这一次是夏令时。 之一:
Time (String timezoneId)
在由字符串参数“timezone”命名的时区中构造一个Time对象。 时间初始化为1970年1月1日。
Parameters | |
---|---|
timezoneId |
String : string containing the timezone to use. |
也可以看看:
boolean after (Time that)
如果此Time对象表示的时间出现在给定时间之后,则返回true。
相当于Time.compare(this, that) > 0
。 详情请参阅compare(Time, Time)
。
Parameters | |
---|---|
that |
Time : a given Time object to compare against |
Returns | |
---|---|
boolean |
true if this time is greater than the given time |
boolean before (Time that)
如果此Time对象表示的时间在给定时间之前发生,则返回true。
相当于Time.compare(this, that) < 0
。 详情请参阅compare(Time, Time)
。
Parameters | |
---|---|
that |
Time : a given Time object to compare against |
Returns | |
---|---|
boolean |
true if this time is less than the given time |
void clear (String timezoneId)
清除所有值,将时区设置为给定的时区。 将isDst设置为负值以表示“未知”。
Parameters | |
---|---|
timezoneId |
String : the timezone to use. |
int compare (Time a, Time b)
比较两个 Time
对象,如果 a
小于 b
,则返回负数;如果 a
大于 b
,则 a
正数;如果 a
则 b
0。
当 Time
的日期/时间字段已设置为与可用时区信息相矛盾的本地时间时,此方法可能会返回错误答案。
Parameters | |
---|---|
a |
Time : first Time instance to compare |
b |
Time : second Time instance to compare |
Returns | |
---|---|
int |
a negative result if a is earlier, a positive result if b is earlier, or 0 if they are equal. |
Throws | |
---|---|
NullPointerException |
if either argument is null |
IllegalArgumentException |
if allDay is true but hour , minute , and second are not 0. |
String format (String format)
根据提供的格式字符串打印当前值。 看什么人strftime什么意思。 最后一个字符串必须少于256个字符。
Parameters | |
---|---|
format |
String : a string containing the desired format. |
Returns | |
---|---|
String |
a String containing the current time expressed in the current locale. |
String format2445 ()
格式根据RFC 2445 DATE-TIME类型。
与时区设置为“UTC”的时间格式相同(“%Y%m%dT%H%M%S”)或格式(“%Y%m%dT%H%M%SZ” 。
Returns | |
---|---|
String |
String format3339 (boolean allDay)
以RFC 3339格式返回一个字符串。
如果allDay为true,则表示时间为YMD
否则,如果时区是UTC,则表示时间为YMDTHMS UTC
否则,时间表示为YMDTHMS + - GMT
Parameters | |
---|---|
allDay |
boolean
|
Returns | |
---|---|
String |
string in the RFC 3339 format. |
int getActualMaximum (int field)
给定其他字段的值,返回给定字段的最大可能值。 需要在MONTH_DAY和YEAR_DAY进行归一化处理。
Parameters | |
---|---|
field |
int : one of the constants for HOUR, MINUTE, SECOND, etc. |
Returns | |
---|---|
int |
the maximum value for the field. |
String getCurrentTimezone ()
返回当前为设备设置的时区字符串。
Returns | |
---|---|
String |
int getJulianDay (long millis, long gmtoff)
计算特定时区中某个时间点的儒略日数。 每个时区的给定日期的Julian日是相同的。 例如,2008年7月1日的Julian日是2454649。
呼叫者必须以秒为单位(以 toMillis(boolean)
normalize(boolean)
)以秒为单位传递时间(可由 toMillis(boolean)
或 normalize(boolean)
返回)和时区的UTC偏移(以秒为 gmtoff
)。
Julian日对于测试两个事件是否发生在同一日历日期以及确定事件与现在的相对时间(“昨天”,“3天前”等)有关。
Parameters | |
---|---|
millis |
long : the time in UTC milliseconds |
gmtoff |
long : the offset from UTC in seconds |
Returns | |
---|---|
int |
the Julian day |
int getJulianMondayFromWeeksSinceEpoch (int week)
从该时代开始数周,并计算该周一的Julian日。 这假设包含EPOCH_JULIAN_DAY
的一周被认为是第0周。它在包含该时代的一周的星期一之后的星期一星期几周返回Julian日。
Parameters | |
---|---|
week |
int : Number of weeks since the epoch |
Returns | |
---|---|
int |
The julian day for the Monday of the given week since the epoch |
int getWeekNumber ()
根据ISO 8601计算星期编号。由于此方法使用yearDay和weekDay字段,因此当前的Time对象必须已经标准化。
在IS0 8601,星期一从星期一开始。 一年中的第一周(第一周)由ISO 8601定义为第一周,并且在开始的一年中有四个或更多日子。 或者等同地,包含1月4日的一周。或者等同地,在该年的第一个星期四。
周数可以通过计算星期四进行计算。 第N周包含当年的第N个周四。
Returns | |
---|---|
int |
the ISO week number. |
int getWeeksSinceEpochFromJulianDay (int julianDay, int firstDayOfWeek)
返回自EPOCH_JULIAN_DAY
(1970年1月1日)调整为一周的第一天以来的一周。 这需要一个茱莉安日和星期开始日,并计算从EPOCH_JULIAN_DAY
那天开始的那一周,从0开始。*不要*用这个来计算一年中的ISO星期数。
Parameters | |
---|---|
julianDay |
int : The julian day to calculate the week number for |
firstDayOfWeek |
int : Which week day is the first day of the week, see SUNDAY |
Returns | |
---|---|
int |
Weeks since the epoch |
boolean isEpoch (Time time)
如果给定时间的日期是Julian日历(1970年1月1日格里历)上的时间,则返回true。
当日期/时间字段设置为与可用时区信息相矛盾的本地时间时,此方法可能会返回错误的答案。
Parameters | |
---|---|
time |
Time : the time to test |
Returns | |
---|---|
boolean |
true if epoch. |
long normalize (boolean ignoreDst)
确保每个字段中的值都在范围内。 例如,如果此日历的当前值是3月32日,则normalize()会将其转换为4月1日。它也会填充weekDay,yearDay,isDst和gmtoff。
如果“ignoreDst”为真,则此方法在归一化之前将“isDst”字段设置为-1(“未知”值)。 然后,它计算以毫秒为单位的时间,并在字段解析为有效日期/时间时为“isDst”设置正确的值。
见 toMillis(boolean)
有关何时使用 true或 false的“ignoreDst”,当更多信息 -1
可能会返回。
Parameters | |
---|---|
ignoreDst |
boolean
|
Returns | |
---|---|
long |
the UTC milliseconds since the epoch, or -1 |
boolean parse (String s)
以RFC 2445格式或不包含“时间”字段的缩写格式解析日期时间字符串。 例如,以下所有字符串都是有效的:
allDay
field of this Time class is set to true and the
hour
,
minute
, and
second
fields are set to zero; otherwise (a time field was included in the date-time string)
allDay
is set to false. The fields
weekDay
,
yearDay
, and
gmtoff
are always set to zero, and the field
isDst
is set to -1 (unknown). To set those fields, call
normalize(boolean)
after parsing. To parse a date-time string and convert it to UTC milliseconds, do something like this:
Time time = new Time(); String date = "20081013T160000Z"; time.parse(date); long millis = time.normalize(false);
Parameters | |
---|---|
s |
String : the string to parse |
Returns | |
---|---|
boolean |
true if the resulting time value is in UTC time |
Throws | |
---|---|
TimeFormatException |
if s cannot be parsed. |
boolean parse3339 (String s)
以RFC 3339格式解析时间。 该方法还解析简单日期(即不包含时间或时间偏移的字符串)。 例如,以下所有字符串都是有效的:
如果字符串包含时间和时间偏移量,则将使用时间偏移量将时间值转换为UTC。
如果给定的字符串只包含一个日期(无时间字段),那么 allDay
字段设置为true,并且 hour
, minute
,并 second
字段设置为零。
Returns true if the resulting time value is in UTC time.
Parameters | |
---|---|
s |
String : the string to parse |
Returns | |
---|---|
boolean |
true if the resulting time value is in UTC time |
Throws | |
---|---|
TimeFormatException |
if s cannot be parsed. |
void set (int second, int minute, int hour, int monthDay, int month, int year)
设置字段。 将weekDay,yearDay和gmtoff设置为0,isDst设置为-1。 如果您需要这些,请致电normalize(boolean)
。
Parameters | |
---|---|
second |
int
|
minute |
int
|
hour |
int
|
monthDay |
int
|
month |
int
|
year |
int
|
void set (int monthDay, int month, int year)
设置给定字段的日期。 还将allDay设置为true。 将weekDay,yearDay和gmtoff设置为0,isDst设置为-1。 如果您需要这些,请致电normalize(boolean)
。
Parameters | |
---|---|
monthDay |
int : the day of the month (in the range [1,31]) |
month |
int : the zero-based month number (in the range [0,11]) |
year |
int : the year |
void set (long millis)
给定UTC毫秒,设置此Time对象中的字段。 这个方法返回后,所有的字段都被标准化。 这也将“isDst”字段设置为正确的值。
Parameters | |
---|---|
millis |
long : the time in UTC milliseconds since the epoch. |
long setJulianDay (int julianDay)
根据给定的Julian天数设置时间,该天数必须基于此Time对象中设置的相同时区。 无论如何,“gmtoff”字段不需要初始化,因为给定的Julian日可能具有不同于当前存储在该Time对象中的任何GMT偏移量。 在此方法返回后,所有字段将被标准化,并且在给定的Julian日的开始时间将被设置为上午12点。
The only exception to this is if 12am does not exist for that day because of daylight saving time. For example, Cairo, Eqypt moves time ahead one hour at 12am on April 25, 2008 and there are a few other places that also change daylight saving time at 12am. In those cases, the time will be set to 1am.
Parameters | |
---|---|
julianDay |
int : the Julian day in the timezone for this Time object |
Returns | |
---|---|
long |
the UTC milliseconds for the beginning of the Julian day |
void switchTimezone (String timezone)
转换此时间对象,以便表示的时间保持不变,但位于不同的时区。 在某些情况下,此方法会自动调用normalize()。
如果日期/时间无法正常化,此方法可能会返回错误的结果。
Parameters | |
---|---|
timezone |
String
|
long toMillis (boolean ignoreDst)
将此时间转换为毫秒。 适合与标准java库进行交互。 时间自纪元以来以UTC毫秒为单位。 这确实一个隐含的标准化计算毫秒,但在这个时间对象不更改任何字段。 如果你想标准化这个时间对象中的字段并获得毫秒,那么使用normalize(boolean)
。
如果“ignoreDst”为false,则此方法使用“isDst”字段的当前设置,并在给定时间内“isDst”字段错误时调整返回的时间。 有关此示例,请参阅下面的示例代码。
如果“ignoreDst”为true,则此方法将忽略此Time对象中“isDst”字段的当前设置,而是从此Time对象中的字段中找出正确的“isDst”值(尽可能最好)。 此方法无法找出“isDst”字段的正确值的唯一情况是该时间本质上不明确,因为它在从夏令时切换到标准时间时重复的小时内。
以下是 toMillis(true)调整时间的示例,假定2007年11月4日星期日DST更改为凌晨2点。
Time time = new Time(); time.set(4, 10, 2007); // set the date to Nov 4, 2007, 12am time.normalize(false); // this sets isDst = 1 time.monthDay += 1; // changes the date to Nov 5, 2007, 12am millis = time.toMillis(false); // millis is Nov 4, 2007, 11pm millis = time.toMillis(true); // millis is Nov 5, 2007, 12am
为避免此问题, 请在添加或减去天数后或在明确设置“monthDay”字段后使用toMillis(true) 。 另一方面,如果你正在增加或减少小时或分钟,那么你应该使用toMillis(false) 。
你也应该使用 toMillis(false)如果你想读回,你与设置相同毫秒 set(long)
当日期/时间字段设置为与可用时区信息冲突的本地时间时,此方法可以返回-1
。 例如,当夏令转变导致跳过一小时:该小时内次将返回-1
如果isDst = -1
。 或set(Time)
或解析日期字符串后。
Parameters | |
---|---|
ignoreDst |
boolean
|
Returns | |
---|---|
long |
String toString ()
在YYYYMMDDTHHMMSS中返回当前时间
Returns | |
---|---|
String |
a string representation of the object. |