我想要长时间转换日期。但是在电脑上计算的时间不正确。在Android模拟器上是时间正确计算(在模拟器上是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.out.print(Hours); // 14
System.out.print("\n" + date.getHours()); // 15
答案 0 :(得分:2)
当您将小时数设置为Date
时,java.util.Date
对象独立于TimeZone
的概念。根据其javadoc here,
虽然Date类旨在反映协调的通用 时间(UTC),它可能不会完全这样做,具体取决于主机 Java虚拟机的环境。
因此,当您将小时数设置为15时,日期会解释您自己的时区并设置小时数。如果UTC
(您期望的结果)和您当前的时区存在差异,那么差异就会反映在您的情况中(14 vs 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
答案 1 :(得分:1)
你的问题不明确。
使用Joda-Time库可以更轻松地完成这种日期工作。
依赖默认时区很麻烦。而是,指定您的时区。听起来在您的情况下,所需的小时“15”是UTC / GMT(没有时区偏移)。因此,请指定UTC。
“长期转换日期”是什么意思?也许你的意思是在Date(以及Joda-Time DateTime)中存储毫秒 - 自 - 纪元。
DateTime now = new DateTime( DateTimeZone.UTC );
DateTime fifteen = now.withHourOfDay( 15 );
转储到控制台...
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() );
跑步时......
now: 2014-02-14T12:43:00.836Z
fifteen: 2014-02-14T15:43:00.836Z
fifteen in millis: 1392392580836
fifteen's hour-of-day: 15
答案 2 :(得分:0)
如果尝试调用方法:
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'