Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:XXX至UTC,然后UTC至XXX_Java_Time_Timezone_Utc_Timezone Offset - Fatal编程技术网

Java:XXX至UTC,然后UTC至XXX

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); // <--- }

我创建了一个名为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 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)