Java:XXX至UTC,然后UTC至XXX
我创建了一个名为Time的类,它以UTC存储通过的时间,但您可以将时间传递到任何时区的构造函数中Java:XXX至UTC,然后UTC至XXX,java,time,timezone,utc,timezone-offset,Java,Time,Timezone,Utc,Timezone Offset,我创建了一个名为Time的类,它以UTC存储通过的时间,但您可以将时间传递到任何时区的构造函数中 public class Time { private long timeInUTC; // stores given timeInXXX in UTC public Time(long timeInXXX, TimeZone tz) { timeInUTC = timeInXXX - tz.getOffset(timeInXXX); // <--- }
public class Time {
private long timeInUTC;
// stores given timeInXXX in UTC
public Time(long timeInXXX, TimeZone tz)
{
timeInUTC = timeInXXX - tz.getOffset(timeInXXX); // <---
}
public long get()
{
return timeInUTC;
}
// gets time according to passed timezone
public long get(TimeZone tz)
{
return timeInUTC + tz.getOffset(timeInUTC);
}
}
感谢您的回复…您希望它的价值是什么?对日期/时间使用
long
通常指的是自Unix纪元以来的毫秒,它是时区中性的。你到底想在这里实现什么?我建议在Java8或Joda time中使用java.time包,而不是重新发明轮子。。。是的,我想使用java.time,但我需要java.time无法提供的速度…做什么的速度?老实说,java.time
被证明是一个真正的瓶颈,我会非常惊讶。(至少,如果没有实现同一目标的替代方法,也不是没有。目前我们不知道该目标是什么。)无论哪种方法,你都应该问问自己long
值真正代表了什么。这在正常使用中很清楚-在你的情况下不清楚。我知道long代表什么。。。简单地说,我需要计算从UTC时间到UTC时间到CET时间的偏移量。。。这就是我想要的。。。在现实生活中,如果我有CET时间,当我为UTC时间添加一个偏移量时,我将从CET获得UTC时间(我可以从getOffset()获得偏移量),但我不知道它是如何反向工作的。。。我有UTC时间,我需要得到CET时间。。。同样,我从UTC时间中减去偏移量,得到CET时间。。。但是我不确定,在这种情况下使用getOffset()是否合适……我仍然认为这基本上是个坏主意,但是你在get
中的代码看起来应该没问题,只是你要减去偏移量而不是加上它。构造函数中的代码不正确,因为您正在将一个值传入TimeZone.getOffset,该值从Unix历元起不到一毫秒。
long timeUTC = System.currentTimeMillis(); // 1441975581976
// .getRawOffset() is not accurate in this case
// so simply imagine that next line is in fact: long timeCET = 1441971981976;
long timeCET = timeUTC - TimeZone.getTimeZone("CET").getRawOffset(); // 1441971981976
Time t = new Time(timeCET, TimeZone.getTimeZone("CET")); // see constructor definition
System.out.println(t.get()); // expects 1441975581976 (timeUTC)
System.out.println(t.get(TimeZone.getTimeZone("CET"))); // expects 1441971981976 (timeCET)