UTC java的时差
我想把日期转换成长的。但在pc上计算的小时数不正确。在Android emulator上计算的时间是正确的(在emulator上计算的时间是UTC时间)。请帮忙UTC java的时差,java,android,date,time,Java,Android,Date,Time,我想把日期转换成长的。但在pc上计算的小时数不正确。在Android emulator上计算的时间是正确的(在emulator上计算的时间是UTC时间)。请帮忙 String time = "15:54"; Date date = new Date(); date.setHours(Integer.parseInt(time.substring(0, 2))); long Hours = (date.getTime() / (1000 * 60 * 60)) % 24; System.ou
String time = "15:54";
Date date = new Date();
date.setHours(Integer.parseInt(time.substring(0, 2)));
long Hours = (date.getTime() / (1000 * 60 * 60)) % 24;
System.out.print(Hours); // 14
System.out.print("\n" + date.getHours()); // 15
当您将小时数设置为
Date
时,java.util.Date
对象独立于时区的概念。根据其javadoc
虽然Date类旨在反映协调的通用
时间(UTC),根据主机的不同,它可能不准确
Java虚拟机的环境
因此,当您将小时数设置为15时,date将解释您自己的时区并将小时数设置为15。如果UTCUTC
(您期望的结果)和您当前的时区存在差异,则该差异将反映在您的上述案例中(14对15)
要解决这个问题,1个选项是显式地将您自己的时区设置为UTC,并与预期结果相匹配:
String time = "15:54";
Date date = new Date();
java.util.TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // ADDED THIS LINE
date.setHours(Integer.parseInt(time.substring(0, 2)));
long hours = (date.getTime() / (60 * 60 * 1000)) % 24;
System.out.print(hours); // NOW THIS GIVES 15
System.out.print("\n" + date.getHours()); // 15
另一个选项是使用类(如果不是),以防您想要准确解释时区相关结果。如果尝试调用方法:
private static String TIME_FORMAT = "HH:mm Z";
public static void TestDate( String time_ ) throws ParseException
{
SimpleDateFormat format = new SimpleDateFormat( TIME_FORMAT );
Date date = format.parse( time_ );
long hours = (date.getTime() / (1000 * 60 * 60)) % 24;
System.out.println( "The value 'hours' for '" + time_ + "' is '" + Long.toString( hours ) + "'" );
}
“15:54 UTC”时,输出将为:
The value 'hours' for '15:54 UTC' is '15'
你的问题不清楚
在图书馆里,这种约会时间的工作要容易得多
依赖默认时区很麻烦。相反,请指定您的时区。在您的情况下,所需的小时“15”似乎是UTC/GMT(无时区偏移)。因此,指定UTC
你说的“将日期转换为长日期”是什么意思?也许您的意思是获取日期(以及Joda Time DateTime)中存储的自历元以来的毫秒数
转储到控制台
System.out.println( "now: " + now );
System.out.println( "fifteen: " + fifteen );
System.out.println( "fifteen in millis: " + fifteen.getMillis() );
System.out.println( "fifteen's hour-of-day: " + fifteen.getHourOfDay() );
当运行时
现在:2014-02-14T12:43:00.836Z
十五:2014-02-14T15:43:00.836Z
十五毫秒:1392392580836
一天中的15小时:15
请注意,更改默认时区有风险。影响整个JVM,在该JVM中运行的所有软件将获得不同的时区。我不建议采取这种做法。
System.out.println( "now: " + now );
System.out.println( "fifteen: " + fifteen );
System.out.println( "fifteen in millis: " + fifteen.getMillis() );
System.out.println( "fifteen's hour-of-day: " + fifteen.getHourOfDay() );