Конвертировать календарь Google Date в java.util, чтобы я мог изменить его формат? - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь изменить формат даты вывода для моего кода календаря Google, но его нельзя использовать в SimpleDateFormater, потому что это дата API Google, а не версия Java.

Я заставил его работатьно в итоге удалил этот код, потому что он всегда возвращал ноль.

моя активность приложения отображала бы его как «(мое событие) в нуле», где мое событие обновлялось, но дата всегда возвращала ноль.

Я не очень хорош в работе с API Google, и я новичок в Java, поэтому любая помощь будет оценена!

Вот мой код:

import android.os.AsyncTask;

import com.google.api.client.googleapis.extensions.android.gms.auth.GooglePlayServicesAvailabilityIOException;
import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException;
import com.google.api.client.util.DateTime;
import com.google.api.services.calendar.model.Event;
import com.google.api.services.calendar.model.Events;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * An asynchronous task that handles the Google Calendar API call.
 * Placing the API calls in their own task ensures the UI stays responsive.
 */

/**
 * Created by miguel on 5/29/15.
 */

public class ApiAsyncTask3 extends AsyncTask<Void, Void, Void> {
    private MainActivity mActivity3;

    /**
     * Constructor.
     * @param activity MainActivity that spawned this task.
     */
    ApiAsyncTask3(MainActivity activity) {
        this.mActivity3 = activity;
    }

    /**
     * Background task to call Google Calendar API.
     * @param params no parameters needed for this task.
     */
    @Override
    protected Void doInBackground(Void... params) {
        try {
            mActivity3.clearResultsText();
            mActivity3.updateResultsText(getDataFromApi());

        } catch (final GooglePlayServicesAvailabilityIOException availabilityException) {
            mActivity3.showGooglePlayServicesAvailabilityErrorDialog(
                    availabilityException.getConnectionStatusCode());

        } catch (UserRecoverableAuthIOException userRecoverableException) {
            mActivity3.startActivityForResult(
                    userRecoverableException.getIntent(),
                    BlockOrderGCalDaily.REQUEST_AUTHORIZATION);

        } catch (IOException e) {
            mActivity3.updateStatus("The following error occurred: " +
                    e.getMessage());
        }
        return null;
    }

    /**
     * Fetch a list of the next 10 events from the primary calendar.
     * @return List of Strings describing returned events.
     * @throws IOException
     */
    private List<String> getDataFromApi() throws IOException {
        // List the next 10 events from the primary calendar.
        DateTime now = new DateTime(System.currentTimeMillis());
        List<String> eventStrings = new ArrayList<String>();
        Events events = mActivity3.mService.events().list("9sfoekroead5j1sb8aduqgvog4@group.calendar.google.com")
                .setMaxResults(1)
                .setTimeMin(now)
                .setOrderBy("startTime")
                .setSingleEvents(true)
                .execute();
        List<Event> items = events.getItems();

        for (Event event : items) {
            DateTime start = event.getStart().getDateTime();
            if (start == null) {
                // All-day events don't have start times, so just use
                // the start date.
                start = event.getStart().getDate();

            }



            eventStrings.add(
                    String.format("%s on %s", event.getSummary(), start));
        }
        return eventStrings;
    }

}

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018
Date javaDate = new Date(googleDate.getValue());

Затем вы можете отформатировать его по своему выбору.

0 голосов
/ 30 сентября 2018

Получить счетчик миллисекунд с начала эпохи 1970-01-01T00: 00: 00Z.Звоните com.google.api.client.util.DateTime::getValue.

long millis = myDateTime.getValue() ;

Парсируйте их как java.time.Instant.

Instant instant = Instant.ofEpochMilli( millis ) ;

Настройте UTC на нужный вам часовой пояс.

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

Создание строки.

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( Locale.CANADA_FRENCH ) ;
String output = zdt.format( f ) ;

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

...