如何在ZonedDateTime for Java

时间:2018-05-02 10:34:09

标签: java timezone zoneddatetime java-date

我的意思是这个。假设我有一个日期对象,即2018年5月1日,上午12:00。我想创建一个ZonedDateTime对象,即2018年5月1日,凌晨12:00,但是另一个时区(比如EST)。因为如果我将该日期对象传入ZonedDateTime,它会将该日期对象视为UTC(因此它将其视为2018年5月1日格林尼治标准时间上午12:00),我希望它保留该日期字段值但更改到美国东部时间的timzeone(2018年5月1日,美国东部时间上午12:00)。有没有办法在Java中做到这一点?

1 个答案:

答案 0 :(得分:0)

您需要的是int counter = 1; // global class Fetchdata extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { } @Override protected Void doInBackground(Void... voids) { try { switch (counter) { case 1: method1(); break; case 2: method2(); break; case 3: method3(); break; case 4: method4(); break; case 5: method5(); break; default: cancel(true); counter = 1; break; } } catch (Throwable e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void aVoid) { counter+=1; Log.d(TAG, "onPostExecute: "+counter); // cancel(true); new Fetchdata().execute(); } } void method1(){ try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } Log.d(TAG, "methode1: coucou"); } void method2(){ try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } Log.d(TAG, "methode2: "); } void method3(){ try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } Log.d(TAG, "methode3: "); } void method4(){ try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } Log.d(TAG, "methode4: "); } void method5(){ try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } Log.d(TAG, "methode5: "); }

sudo systemctl enable yourcelery.service

这将在所有时区中被理解,并且永远不会是5月1日以外的任何其他内容。LocalDate中此类和其他类名称中的“本地”表示“没有时区”。

如果您坚持使用 LocalDate date = LocalDate.of(2018, Month.MAY, 1); ,则答案为java.time

ZonedDateTime

输出:

  

2018-05-01T00:00 + 10:00 [澳大利亚/布里斯班]

不要依赖EST或其他三和四个字母的时区缩写。例如,EST是模糊的(在北美和澳大利亚使用)并且不是时区(使用不到一年的一半)。而是给予地区/城市,例如America / Atikokan。

如果通过“日期对象”表示过时的withZoneSameLocal类的对象(如果可以的话,请避开它​​们,而不是 ZonedDateTime zdt = date.atStartOfDay(ZoneOffset.UTC); ZonedDateTime inEst = zdt.withZoneSameLocal(ZoneId.of("Australia/Brisbane")); System.out.println(inEst); 中的现代类):

java.util.Date

输出:

  

2018年5月1日