从一天开始的java小时和分钟(毫秒)
我试图解决这个错误的输出,但没有任何帮助:
Calendar cal = Calendar.getInstance();
cal.setTimeZone( TimeZone.getDefault() );
long oraPrecisa = cal.getTimeInMillis();
Log.e( "" , "oraPrecisa: " + new DateFormat().format( "HH:mm", oraPrecisa ).toString() );
cal.set( Calendar.HOUR_OF_DAY, 0 );
cal.set( Calendar.MINUTE, 0 );
cal.set( Calendar.SECOND, 0 );
cal.set( Calendar.MILLISECOND, 1 );
oraPrecisa = oraPrecisa - cal.getTimeInMillis();
Log.e( "" , "OraPrecisa 2: " + new DateFormat().format( "HH:mm", oraPrecisa ).toString() );
返回此输出:
OraPrecisa: 13:58
OraPrecisa 2: 14:58
我得到一个小时的错误(由于时区我猜,因为我在GMT+1),有什么帮助吗
# 1 楼答案
请注意日历类的设置部分,有些地方出错:
set(f,value)将日历字段f更改为value。此外,它还设置了一个内部成员变量,以指示日历字段f已更改。尽管日历字段f会立即更改,但在下一次调用get()、getTime()、getTimeInMillis()、add()或roll()之前,不会重新计算日历的时间值(以毫秒为单位)。因此,多次调用set()不会触发多次不必要的计算。使用set()更改日历字段后,其他日历字段也可能会更改,具体取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段后,get(f)不一定返回通过调用set方法设置的值。具体内容由具体的日历类决定
refrence
# 2 楼答案
爪哇。时间
如果要将一天中的时间转换为毫秒:
如果你问我从一天开始算起的毫秒数,我会照字面理解:
当我刚才运行这两个片段时(意大利是15:18:28),它们都打印出来了
那有什么区别吗?到目前为止,在大多数情况下,上面的两个片段将打印相同的结果。但是,例如,如果在同一天早些时候转换到或转换到夏季时间(夏令时),则本地时间将不会反映从一天开始经过的时间,然后片段将给出不同的结果。所以你应该仔细选择你想要的
由于自午夜起的毫秒数永远不会溢出
int
,因此如果愿意,可以安全地强制转换为该类型我现在使用的是{},即现代Java日期和时间API,而不是过时且设计拙劣的
Calendar
类。和你一起工作真是太好了问题:我可以使用java吗。Android上的时间
是的,
java.time
在较旧和较新的Android设备上运行良好。它至少需要Java6org.threeten.bp
导入日期和时间类李>链接
java.time
李>java.time
首先被描述李># 3 楼答案
我认为问题在于你试图将两个日期之间的差异视为一个日期
如果以另一种方式运行代码,则会正确显示差异: