Unix Time для Китая - PullRequest
       14

Unix Time для Китая

0 голосов
/ 20 апреля 2019

Я пытаюсь узнать местное время Китая.Я получаю unixTimeStamp с веб-сайта worldtimeapi.org.

Проблема: я получаю свое местное время вместо времени Китая.

private class BackgroundProcess extends AsyncTask<Void, Void, String> {




    @Override
    protected String doInBackground(Void... voids) {
        String value = null;
        HttpHandler httpHandler = new HttpHandler();
        // Making a request to url and getting response
        String url = "http://worldtimeapi.org/api/timezone/Asia/Shanghai";

        String jsonStr = httpHandler.makeServiceCall(url);

        Log.e(TAG, "Response from url: " + jsonStr);

        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);

               value = jsonObj.getString("unixtime");

                Log.e(TAG, "Operation Okay: " + "\n\n"+value);

            } catch (final JSONException e) {

                Log.e(TAG, "Json parsing error: " + e.getMessage());



            }

        } else {
            Log.e(TAG, "Couldn't get json from server.");

        }

        return value ;





    }

    @Override
    protected void onPostExecute(String aVoid) {
        super.onPostExecute(aVoid);

        Toast.makeText(Timer_FullTime.this, aVoid, Toast.LENGTH_SHORT).show();

        long l = Long.valueOf(aVoid);
        long milliSec = l * 1000 ;



        SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a dd/MM/yyyy");
        String dateString = formatter.format(new Date(milliSec));
        currentTime.setText("" + dateString);
    }
}

Я не понимаю, почему я не могу получить время Китая, котороесейчас 6:30, вместо этого я продолжаю получать свое местное время, которое сейчас 3:54.

Заранее спасибо

1 Ответ

2 голосов
/ 20 апреля 2019

Избегайте устаревших классов даты и времени

Никогда не используйте SimpleDateFormat и Date. Эти ужасные классы были вытеснены несколько лет назад современными java.time классами, определенными в JSR 310.

java.time

Похоже, вы получаете длинное целое число, представляющее количество целых секунд с начала отсчета эпохи первого момента 1970 UTC.

Если это так, проанализировать как Instant.

Instant instant = Instant.ofEpochSeconds( seconds ) ;

Настройте UTC на ваш часовой пояс, применив ZoneId, чтобы получить ZonedDateTime.

ZoneId z = ZoneId.of( "Asia/Shanghai" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

Для более старых версий Android см. Проекты Threeten-Backport и ThreeTenABP.

Все это уже много раз освещалось. Переполнение стека поиска перед публикацией.

...