Edite calendarios de horas de trabajo mediante API

Las organizaciones a menudo necesitan crear, editar o eliminar horas de trabajo mediante programación en los calendarios de sus recursos. Los calendarios muestran las horas de trabajo, el tiempo libre y los descansos que determinan la disponibilidad de un recurso cuando se programa el trabajo. Esos recursos deben programarse en zonas horarias específicas, pueden observar cierres comerciales o no, y pueden tener capacidad variable. Para obtener información sobre cómo definir las horas de trabajo en la aplicación Field Service, vaya a Agregar horas de trabajo a un recurso que se puede reservar.

Además de usar la aplicación Field Service, puede usar las siguientes API para modificar las reglas del calendario para los tipos de registros seleccionados:

  • La API Save Calendar (msdyn_SaveCalendar) crea o actualiza registros de calendario en una entidad seleccionada, en función de las entradas pasadas como solicitud.
  • La API Delete Calendar (msdyn_DeleteCalendar) elimina todo reglas internas del calendario de un calendario en una entidad seleccionada, en función de las entradas pasadas como la solicitud.
  • La API de guardar/eliminar calendario V2 (msdyn_SaveCalendar/msdyn_DeleteCalendar, pass flag UseV2) permite varias recurrencias de horas de trabajo simultáneamente al alterar la lógica de las reglas superpuestas. Para más información, vea ¿Qué sucede si hay reglas superpuestas?.

Este artículo contiene detalles sobre la entrada (solicitud) y salida (respuesta) de cada API, y su uso, con ejemplos.

Requisitos previos

  • Versión de la plataforma 9.2.21055 o superior con Programación de recursos universal, versión 3.12.45.7.
  • Uso de uno de los siguientes tipos de registro:
    • Recurso reservable (bookableresource)
    • Requisitos del recurso (msdyn_resourcerequirement)
    • Plantilla de horas de trabajo (msdyn_workhourtemplate)
    • Proyecto (msdyn_project)

Tipos de eventos de calendario

Cuando crea un calendario, define cuántas veces un tipo de hora de trabajo ocurre (una vez, todo el día, cada semana o todos los días) o puede crear una periodicidad personalizada. Para obtener más información sobre estos eventos del calendario, vaya a los ejemplos más adelante en este artículo.

Repetición

Cuando un tipo de hora de trabajo ocurre solo una vez en el calendario de la entidad, se llama ocurrencia.

Por ejemplo, considere un recurso que funciona de 5:00 a 10:00 el 26 de mayo de 2021. Estas API solo admiten este tipo de ocurrencia, que comienza y termina en el mismo día. Para otro ejemplo, considere un recurso que funciona desde el 26 de mayo de 2021 a las 20:00 hasta las 10:00 del 27 de mayo de 2021. No puede crear esta ocurrencia usando solo una llamada de la API msdyn_SaveCalendar; en su lugar, necesita hacer dos llamadas.

Ocurrencia de todo el día

Cuando se produce un tipo de hora de trabajo para uno o más días completos, comenzando a la medianoche (00:00) de la fecha de inicio, es una ocurrencia de todo el día. La duración máxima de una ocurrencia de todo el día es de cinco años.

Por ejemplo, un recurso funciona todo el día desde el 26 de mayo de 2021 hasta el final del día 30 de mayo de 2021. Esta es una ocurrencia de todo el día que dura cinco días.

Periodicidad semanal

Cuando un tipo de hora de trabajo ocurre a la misma hora en días seleccionados de cada semana, se llama periodicidad semanal.

Por ejemplo, un recurso funciona de 5:00 a 10:00 todos los lunes, martes y miércoles.

Periodicidad diaria

Cuando un tipo de hora de trabajo ocurre a la misma hora cada día, se llama periodicidad diaria.

Por ejemplo, un recurso funciona de 5:00 a 10:00 todos los días de la semana.

Periodicidad personalizada

Cuando se produce un tipo de hora de trabajo a determinadas horas de determinados días de la semana, pero las horas son diferentes en días distintos, puede crear una periodicidad personalizada.

Por ejemplo, un recurso funciona de 5:00 a 10:00 todos los lunes, y de 12:00.a 15:00 todos los miércoles.

Tipos de horas de trabajo

Estas API admiten operaciones de creación, actualización y eliminación para los siguientes tipos de horas de trabajo:

Horas laborables

Las horas de trabajo son momentos durante los cuales una entidad está disponible para realizar un trabajo.

Mediante estas API, puede hacer lo siguiente:

  • Cree, edite o elimine una periodicidad de horario laboral.
  • Cree, edite o elimine una periodicidad diaria de horario laboral.
  • Cree, edite o elimine una periodicidad semanal de horario laboral.
  • Cree, edite o elimine una periodicidad personalizada de horario laboral.
  • Cree, edite o elimine el horario laboral de todo el día.
  • Cree o edite la capacidad en horario laboral.
  • Edite una aparición de una sola hora laboral en una periodicidad.
  • Edite Esta ocurrencia y las siguientes en una periodicidad.
  • Cambie la ocurrencia de una hora laboral a una periodicidad.
  • Cambie la zona horaria de la regla de calendario.

Mediante esta API, no puede hacer lo siguiente:

  • Eliminar una aparición de una sola hora laboral de una periodicidad.
  • Crear una ocurrencia que abarque 24 horas, pero que no comience ni termine a medianoche (00:00).
  • Crear, editar o eliminar una periodicidad de todo el día.

Horas no laborables

Son momentos en los que la entidad no está disponible para trabajar por un motivo no especificado.

Mediante estas API, puede hacer lo siguiente:

  • Cree o edite un horario no laboral de todo el día.
  • Cree o edite una periodicidad de horario no laboral.
  • Cambie la zona horaria de la regla de calendario.

Mediante estas API, no puede hacer lo siguiente:

  • Crear o editar una periodicidad de horario no laboral.

Pausar

Son momentos de una jornada laboral en los que una entidad se toma un descanso y no está disponible para trabajar. Los descansos no pueden existir sin horas laborales; tienen que ocurrir entre dos horas laborales en un día. Los descansos no pueden superponerse con las horas de trabajo.

Mediante estas API, puede hacer lo siguiente:

  • Cree o edite un descanso durante las horas laborales.

Mediante estas API, no puede hacer lo siguiente:

  • Elimine solo los descansos de una ocurrencia o periodicidad de horas laborales.

Indisponibilidad

Son momentos en los que una entidad no está disponible para trabajar por vacaciones. Se puede especificar el motivo de la indisponibilidad.

Mediante estas API, puede hacer lo siguiente:

  • Cree o edite la indisponibilidad con una etiqueta.
  • Cambie la zona horaria de la regla de calendario.

Mediante estas API, no puede hacer lo siguiente:

  • Cree o edite una periodicidad de horario de indisponibilidad.

Cierre de empresa

Usted puede crear entidades de cierre de negocios que definen los horarios de cierre del negocio. Utilizando la API msdyn_SaveCalendar, puede configurar cada entidad para observar o ignorar los tiempos de cierre del negocio de la organización mediante el uso de la clave opcional ObservarCierre. Cuando estén configurados para observar estos cierres, las entidades no están disponibles para trabajar.

Guardar API Calendario

Entrada

La solicitud contiene solo un atributo, CalendarEventInfo, el cual es un tipo de Cadena. Contiene varios otros atributos que están todos incrustados en esta cadena.

Nota

En la siguiente tabla, Tipo representa el formato que se espera para realizar una solicitud satisfactoria. Sin embargo, toda la solicitud se analiza como una sola cadena.

CalendarEventInfo

Asignar nombre Tipo Necesario Descripción
EntityLogicalName String Esta clave describe la entidad desde la que se llama a la API. El calendario de esta entidad debe crearse o editarse.
CalendarId GUID Esta clave contiene la id. de calendario relacionado con la entidad descrita anteriormente. Cuando se crea cualquiera de estas entidades, también se crea automáticamente un registro de calendario. Estas API editan ese registro de calendario agregando reglas o editando reglas existentes.
RulesAndRecurrences RulesAndRecurrences Esta clave es una matriz y cada elemento contiene múltiples atributos, tal y como se enumeran en la tabla de la siguiente sección. El tamaño de la matriz debe ser al menos uno.
IsVaried Booleana No Esta clave debe establecerse en true para escenarios de periodicidad personalizados.
IsEdit Booleana No Esta clave debe establecerse en true para la edición de reglas existentes.
TimeZoneCode Número entero No Esta clave toma un valor entero correspondiente a la zona horaria de las reglas del calendario. Para la asignación, vaya a Códigos de zona horaria, más adelante en este artículo. El valor predeterminado es la zona horaria del usuario.
InnerCalendarDescription String No Esta clave solo es necesaria si la regla del calendario es para tiempo libre. Debe contener el motivo de la indisponibilidad.
ObserveClosure Booleana No Esta clave es específica de las periodicidades. Si está configurado en true, la entidad observa el cierre del negocio.
RecurrenceEndDate Fecha y hora No Esta clave es específica de las periodicidades. Contiene la fecha de finalización de la periodicidad. Si la marca de tiempo es 08:00:00 o antes, la fecha de finalización de la repetición es un día antes de la fecha especificada. Si la marca de tiempo es 08:00:01 o posterior, la fecha se respetará tal cual. El valor predeterminado para las ocurrencias es nulo. El valor predeterminado para las recurrencias es 30 de diciembre de 9999, 23:59:59 horas, UTC.
RecurrenceSplit Booleana No Esta clave es específica de las periodicidades. Está configurado en true para editar "Esta y las siguientes ocurrencias" de una periodicidad.
ResourceId GUID No Esta clave contiene SystemUserId o ResourceId y solo debe pasarse cuando la entidad asociada con esta llamada es un recurso que se puede reservar de tipo SystemUser. Esto es necesario para comprobar los privilegios de OwnCalendar en la pestaña Administración de servicios.
UseV2 Marca No Pasar este indicador habilita la versión V2 del calendario de horas de trabajo, con una lógica de reglas superpuestas mejorada que permite múltiples recurrencias. Para más información, vea ¿Qué sucede si hay reglas superpuestas?.

RulesAndRecurrences

Name Type Obligatorio Descripción
Reglas Reglas Esta clave es una matriz y cada elemento contiene múltiples atributos, tal y como se enumeran en la tabla de la siguiente sección. El tamaño de la matriz debe ser al menos uno.
RecurrencePattern String No Esta clave es específica de las periodicidades. Actualmente solo admitimos este patrón: FREQ=WEEKLY;INTERVAL=1;BYDAY=SU,MO,TU,WE,TH,FR,SA. BYDAY se puede cambiar para incluir menos días; sin embargo, FREQ e INTERVAL no se pueden cambiar.
InnerCalendarId GUID No Esta clave es específica para la edición. Si se está editando una regla, InnerCalendarId se debe aprobar aquí. Si una InnerCalendarId no se aprueba, la API crea una nueva regla, incluso si la clave IsEdit se establece en verdadero.
Acción Número entero No Esta clave es específica de las periodicidades personalizadas. Si se está creando o editando una periodicidad personalizada, se debe introducir uno de los siguientes números:
  • (1) Agregar un día a la periodicidad
  • (2) Eliminar un día de la periodicidad
  • (3) Editar solo las fechas u horas de inicio o finalización, o capacidad de edición
  • (4) Editar cualquier otra cosa que no sean las claves mencionadas en (3)

Reglas

Asignar nombre Tipo Necesario Descripción
StartTime DateTime Esta clave contiene una entrada de fecha y hora en Formato ISO. Por ejemplo, \"2021-05-15T12:00:00.000Z\". La porción de tiempo determina la hora de inicio de la hora de trabajo en la zona horaria especificada anteriormente. La parte de la fecha determina la fecha de inicio de la hora de trabajo. Aquí, el 15 de mayo de 2021 es la fecha de la ocurrencia o la fecha de inicio de la periodicidad. Si el patrón fuera BYDAY=TU,WE, pero el 15 de mayo (un sábado) es la fecha, la API creará o editará automáticamente las reglas para todos los martes y miércoles posteriores al 15 de mayo. Este es el caso en el que la regla no tiene que tener la fecha correspondiente al día.
EndTime DateTime Esto contiene una entrada de fecha y hora en Formato ISO. Por ejemplo, \"2021-05-15T12:00:00.000Z\". La porción de tiempo determina la hora de fin de la hora de trabajo en la zona horaria especificada anteriormente. La parte de la fecha debe contener la misma fecha que la parte de la fecha de StartTime. Las únicas excepciones son:
  • Si es una ocurrencia de todo el día. En este caso, la parte de la fecha debe reflejar la fecha de finalización de la ocurrencia de todo el día.
  • La ocurrencia finaliza al final del día, es decir, a las 00:00 del día siguiente. En este caso, el formato de la fecha debería ser \"2021-05-16T00:00:00.000Z\". Para especificar la fecha de finalización de la periodicidad, modifique el atributo RecurrenceEndDate.
WorkHourType Número entero Esta clave contiene un número correspondiente a una de las siguientes opciones:
  • (0) En curso
  • (1) Pausa
  • (2) No laborable
  • (3) Indisponibilidad
Esfuerzo Número entero No Esta clave determina la capacidad de la entidad. Debe ser un número entero. El valor predeterminado es 1.

Salida

Esta API POST crea o modifica registros de reglas de calendario para la entidad seleccionada. También da la siguiente salida.

Asignar nombre Tipo Descripción
InnerCalendarIds String Una serie de GUID de InnerCalendarIds que son el resultado de la operación POST.

Eliminar API Calendar

Entrada

Asignar nombre Tipo Necesario Descripción
EntityLogicalName String Este campo describe la entidad cuyas reglas de calendario se eliminarán.
InnerCalendarId GUID Este campo describe la id. del InnerCalendarId que debe ser eliminado. Si hay varias InnerCalendarIds asociadas con una sola regla, cualquier id. es suficiente aquí. Más información sobre calendarios internos y externos: Entidades de calendario
CalendarId GUID Este campo describe la CalendarId de la entidad.
IsVaried Booleana No Este campo es específico de las periodicidades y se establece en yes si se elimina una regla de periodicidad personalizada.
UseV2 Marca No Pasar este indicador habilita la versión V2 del calendario de horas de trabajo, con una lógica de reglas superpuestas mejorada que permite múltiples recurrencias. Para más información, vea ¿Qué sucede si hay reglas superpuestas?.

Salida

Esta API POST elimina registros de reglas de calendario para la entidad seleccionada. Además, también da la siguiente salida.

Asignar nombre Tipo Descripción
InnerCalendarIds String Una serie de GUID de InnerCalendarIds que son el resultado de la operación POST.

Cargar API de calendario

Entrada

Nombre: msdyn_LoadCalendars
Tipo: Acción
Descripción: Devuelve calendarios para LoadCalendarsInput determinado.

Nombre: msdyn_LoadCalendars.LoadCalendarsInput
Tipo: Parámetro
Descripción: Cadena en el siguiente formato JSON:

{
   StartDate: string,
   EndDate: string,
   CalendarIds: string[]
}

Nombre: msdyn_LoadCalendarsResponse
Tipo: ComplexType
Descripción: Contiene la respuesta de la acción msdyn_loadCalendars.

Nombre: msdyn_LoadCalendarsResponse.CalendarEvents
Tipo: Propiedad
Descripción: Cadena en el siguiente formato JSON:

{
"calendarId": CalendarEventSlot[]
}

Donde calendarId es un guid adecuado que representa el Guid del Calendario y CalendarEventSlot es un objeto con el siguiente formato:

{
  CalendarId: string,
  InnerCalendarId: string,
  Start: string,
  End: string,
  Effort: double
}

Cómo llamar a las API

Estas API se pueden llamar mediante el navegador.

  1. Abra el navegador y la organización en la que necesita realizar estos cambios de calendario.
  2. Abra las herramientas de desarrollo (seleccione Control+Mayúscula+I en Microsoft Edge, seleccione F12 en Google Chrome).
  3. En la consola, ingrese la siguiente función, después de reemplazar [nombre de la organización] con los detalles de la organización (por ejemplo, http://your_org.crm.dynamics.com):
       function CalendarAction(action, data) {
           let req = new XMLHttpRequest();
           req.open("POST", "**[org-name]**/api/data/v9.0/" + action, true);
           req.setRequestHeader("OData-MaxVersion", "4.0");
           req.setRequestHeader("OData-Version", "4.0");
           req.setRequestHeader("Accept", "application/json");
           req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
           req.setRequestHeader("Prefer", 'odata.include-annotations="*"');
           req.onreadystatechange = function () {
               if (this.readyState === 4) {
                   req.onreadystatechange = null;
                   if(this.status == 200) {
                       console.log(JSON.parse(this.response));
                   } else {
                       console.error(JSON.parse(this.response));
                   }
               }
           };
           req.send(JSON.stringify(data));
       }
  1. Una vez definida esta función, puede llamarla para crear, editar o eliminar calendarios mediante las API. Ingrese la siguiente llamada para guardar un calendario:
       CalendarAction("msdyn_SaveCalendar",{
           "CalendarEventInfo":"{
               \"CalendarId\":\"df0857c4-50f5-4576-8e89-f236670ad2d5\",
               \"EntityLogicalName\":\"bookableresource\",
               \"TimeZoneCode\":92,\"StartDate\":\"2021-04-25T00:00:00.000Z\",
               \"IsVaried\":false,
               \"RulesAndRecurrences\":[{
                   \"Rules\":[{
                       \"StartTime\":\"2021-04-25T08:00:00.000Z\",
                       \"EndTime\":\"2021-04-25T17:00:00.000Z\",
                       \"Duration\":540,
                       \"Effort\":1
                   }]
               }]
           }"
       })

Ingrese la siguiente llamada para eliminar un calendario:

       CalendarAction("msdyn_DeleteCalendar", {
           "CalendarEventInfo":"{
               \"CalendarId\":\"8390358c-77d0-430f-b176-f27adadac8eb\",
               \"EntityLogicalName\":\"bookableresource\",
               \"InnerCalendarId\":\"cf508c2c-5c55-485c-be1e-d2ebcb385441\"
           }"
       })
       

Consulte la siguiente sección para ver ejemplos de cómo realizar diferentes llamadas según sus necesidades. Reemplace la action de la llamada a la función en el paso 3 con msdyn_SaveCalendar o msdyn_DeleteCalendar y reemplace data con la CalendarEventInfo relevante.

Vea también la siguiente captura de pantalla para una llamada de Power Automate a la acción msdyn_SaveCalendar: Llamada a Power Automate para la acción msdyn_SaveCalendar.

Escenarios de ejemplo para el uso de API

Veamos algunos escenarios para los que puede usar estas API.

Bob y Tim son conductores de camiones de reparto para Contoso Enterprises en Bellevue, Washington. Su despachadora, Debbie, es responsable de realizar cambios en sus calendarios de horas de trabajo. Debbie realiza estos cambios utilizando las API msdyn_SaveCalendar y msdyn_DeleteCalendar.

Cree una ocurrencia de horario laboral.

Bob tiene una programación que prevé que conduzca para entregar paquetes de 9:00 a 17:00 el 15 de mayo de 2021. Debbie usa la API msdyn_SaveCalendar.

Solicitud

{
 "CalendarEventInfo": "{\"CalendarId\":\"d33263c7-c16b-4e3e-a56a-20f7a66cafc1\",\"EntityLogicalName\":\"bookableresource\",\"TimeZoneCode\":5,\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-05-15T09:00:00.000Z\",\"EndTime\":\"2021-05-15T17:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}]}]}"
}

Response

{
  "InnerCalendarIds": "[\"f76cc333-cbbe-eb11-a81d-000d3a6e4359\"]"
}

Edite una ocurrencia de horario laboral.

Luego, el horario de Bob cambia para comenzar a las 10:00 del 15 de mayo de 2021. Debbie usa la API msdyn_SaveCalendar.

Solicitud

{
 "CalendarEventInfo": "{\"CalendarId\":\"d33263c7-c16b-4e3e-a56a-20f7a66cafc1\",\"EntityLogicalName\":\"bookableresource\",\"IsEdit\":\"true\",\"TimeZoneCode\":5,\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-05-15T10:00:00.000Z\",\"EndTime\":\"2021-05-15T17:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}], \"InnerCalendarId\":\"f76cc333-cbbe-eb11-a81d-000d3a6e4359\"}]}"
}

Response

{
  "InnerCalendarIds": "[\"f76cc333-cbbe-eb11-a81d-000d3a6e4359\"]"
}

Borre una ocurrencia de horario laboral.

Surge una emergencia familiar y Bob necesita cancelar todo el día de trabajo. Debbie usa la API msdyn_DeleteCalendar.

Solicitar

{
 "CalendarEventInfo": "{\"CalendarId\":\"d33263c7-c16b-4e3e-a56a-20f7a66cafc1\",\"EntityLogicalName\":\"bookableresource\",\"InnerCalendarId\":\"f76cc333-cbbe-eb11-a81d-000d3a6e4359\"}"
}

Respuesta

{
  "InnerCalendarIds": "[\"f76cc333-cbbe-eb11-a81d-000d3a6e4359\"]"
}

Cree una periodicidad diaria de horario laboral

A partir del 20 de mayo de 2021, Bob decide trabajar con Contoso toda la semana de 8:00 a. m. a 5:00 p. m. y dejará de trabajar allí el 15 de julio de 2021.

Solicitar

{
 "CalendarEventInfo": "{\"CalendarId\":\"d33263c7-c16b-4e3e-a56a-20f7a66cafc1\",\"EntityLogicalName\":\"bookableresource\",\"TimeZoneCode\":5,\"RecurrenceEndDate\":\"2021-07-15T00:00:00.000Z\",\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-05-20T08:00:00.000Z\",\"EndTime\":\"2021-05-20T17:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}],\"RecurrencePattern\":\"FREQ=WEEKLY;INTERVAL=1;BYDAY=SU,MO,TU,WE,TH,FR,SA\"}]}"
}

Respuesta

{
  "InnerCalendarIds": "[\"20f6cfa7-cfbe-eb11-a81d-000d3a6e4359\"]"
}

Edite una periodicidad diaria de horas de trabajo con mayor capacidad

Bob decide dejar de trabajar durante toda la semana del 15 de junio de 2021 para tomarse un descanso. Hasta entonces, Bob continuará con el horario de toda la semana, como acordó previamente. Debbie realiza estos cambios utilizando la API msdyn_SaveCalendar.

Solicitud

{
 "CalendarEventInfo": "{\"CalendarId\":\"d33263c7-c16b-4e3e-a56a-20f7a66cafc1\",\"EntityLogicalName\":\"bookableresource\",\"TimeZoneCode\":5,\"RecurrenceEndDate\":\"2021-06-15T00:00:00.000Z\",\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-05-20T08:00:00.000Z\",\"EndTime\":\"2021-05-20T17:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}],\"InnerCalendarId\":\"20f6cfa7-cfbe-eb11-a81d-000d3a6e4359\",\"RecurrencePattern\":\"FREQ=WEEKLY;INTERVAL=1;BYDAY=SU,MO,TU,WE,TH,FR,SA\"}]}"
}

Response

{
  "InnerCalendarIds": "[\"867a2461-cdbe-eb11-a81d-000d3a6e4359\"]"
}

Cree una periodicidad semanal de horario laboral

A partir del 16 de junio de 2021, Bob trabajará de 8:00 a. m. a 5:00 p. m. los miércoles y viernes, y tomará un descanso de 12:00 p. m. a 12:30 p. m. para almorzar. Debbie usa la API msdyn_SaveCalendar pero, por desgracia, comete un error y programa el descanso de 12:00 a 13:00.

Solicitar

{
  "CalendarEventInfo": "{\"CalendarId\":\"d33263c7-c16b-4e3e-a56a-20f7a66cafc1\",\"EntityLogicalName\":\"bookableresource\",\"TimeZoneCode\":5,\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-06-16T08:00:00.000Z\",\"EndTime\":\"2021-06-16T12:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}, {\"StartTime\":\"2021-06-16T12:00:00.000Z\",\"EndTime\":\"2021-06-16T13:00:00.000Z\",\"Effort\":null,\"WorkHourType\":1}, {\"StartTime\":\"2021-06-16T13:00:00.000Z\",\"EndTime\":\"2021-06-16T17:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}],\"RecurrencePattern\":\"FREQ=WEEKLY;INTERVAL=1;BYDAY=WE,TH,FR\"}]}"
}

Respuesta

{
  "InnerCalendarIds": "[\"1f894441-d0be-eb11-a81d-000d3a6e4359\"]"
}

Edite un descanso de una periodicidad semanal de horario laboral

Luego, Debbie corrige el error y cambia la pausa para que se produzca de 12:00 a 12:30 mediante el uso de la API msdyn_SaveCalendar.

Solicitud

{
  "CalendarEventInfo": "{\"CalendarId\":\"d33263c7-c16b-4e3e-a56a-20f7a66cafc1\",\"EntityLogicalName\":\"bookableresource\",\"IsEdit\":\"true\",\"TimeZoneCode\":5,\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-06-15T08:00:00.000Z\",\"EndTime\":\"2021-06-15T12:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}, {\"StartTime\":\"2021-06-15T12:00:00.000Z\",\"EndTime\":\"2021-06-15T12:30:00.000Z\",\"Effort\":null,\"WorkHourType\":1}, {\"StartTime\":\"2021-06-15T12:30:00.000Z\",\"EndTime\":\"2021-06-15T17:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}],\"InnerCalendarId\":\"1f894441-d0be-eb11-a81d-000d3a6e4359\",\"RecurrencePattern\":\"FREQ=WEEKLY;INTERVAL=1;BYDAY=WE,TH,FR\"}]}"
}

Response

{
  "InnerCalendarIds": "[\"1f894441-d0be-eb11-a81d-000d3a6e4359\"]"
}

Cree una periodicidad personalizada de horario laboral

Tim trabaja para Contoso los lunes de 8:00 horas a 17:00 horas, y los miércoles de 11:00 horas a 15:00 horas. Tim comenzó a trabajar para Contoso el 16 de mayo de 2021. Debbie usa la API msdyn_SaveCalendar para crear las horas laborales de Tim.

Solicitud

{
"CalendarEventInfo": "{\"CalendarId\":\"a68245c9-ba2e-4496-9c18-3bee75fda396\",\"EntityLogicalName\":\"bookableresource\",\"TimeZoneCode\":5,\"IsVaried\":true,\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-05-16T08:00:00.000Z\",\"EndTime\":\"2021-05-16T17:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}],\"Action\":1,\"RecurrencePattern\":\"FREQ=WEEKLY;INTERVAL=1;BYDAY=MO\"},{\"Rules\":[{\"StartTime\":\"2021-05-16T11:00:00.000Z\",\"EndTime\":\"2021-05-16T15:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}],\"Action\":1,\"RecurrencePattern\":\"FREQ=WEEKLY;INTERVAL=1;BYDAY=WE\"}]}"
}

Response

{
  "InnerCalendarIds": "[\"9fb8c199-d1be-eb11-a81d-000d3a6e4359\", \"a2b8c199-d1be-eb11-a81d-000d3a6e4359\"]"
}

Edite una periodicidad personalizada de horario laboral

Luego, el horario de Tim cambia a miércoles de 17:00 a 20:00 y los jueves de 10:00 a 12:00. El lunes se elimina del programa de Tim. Debbie usa la API msdyn_SaveCalendar para lograr esto.

Solicitar

{
"CalendarEventInfo": "{\"CalendarId\":\"a68245c9-ba2e-4496-9c18-3bee75fda396\",\"EntityLogicalName\":\"bookableresource\",\"TimeZoneCode\":5,\"IsVaried\":true,\"IsEdit\":true,\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-05-16T08:00:00.000Z\",\"EndTime\":\"2021-05-16T17:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}],\"Action\":2,\"InnerCalendarId\":\"9fb8c199-d1be-eb11-a81d-000d3a6e4359\",\"RecurrencePattern\":\"FREQ=WEEKLY;INTERVAL=1;BYDAY=MO\"},{\"Rules\":[{\"StartTime\":\"2021-05-16T17:00:00.000Z\",\"EndTime\":\"2021-05-16T20:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}],\"Action\":3,\"InnerCalendarId\":\"a2b8c199-d1be-eb11-a81d-000d3a6e4359\",\"RecurrencePattern\":\"FREQ=WEEKLY;INTERVAL=1;BYDAY=WE\"}, {\"Rules\":[{\"StartTime\":\"2021-05-16T10:00:00.000Z\",\"EndTime\":\"2021-05-16T12:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}],\"Action\":1,\"InnerCalendarId\":null,\"RecurrencePattern\":\"FREQ=WEEKLY;INTERVAL=1;BYDAY=TH\"}]}"
}

Respuesta

{
  "InnerCalendarIds": "[\"a2b8c199-d1be-eb11-a81d-000d3a6e4359\", \"942bda0f-d3be-eb11-a81d-000d3a6e4359\"]"
}

Edite una aparición de una hora laboral en una periodicidad

El 26 de mayo de 2021, Tim solo podrá trabajar de 13:00 a 19:00. Debbie usa la API msdyn_SaveCalendar aquí.

Solicitar

{
 "CalendarEventInfo": "{\"CalendarId\":\"a68245c9-ba2e-4496-9c18-3bee75fda396\",\"EntityLogicalName\":\"bookableresource\",\"TimeZoneCode\":5,\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-05-26T13:00:00.000Z\",\"EndTime\":\"2021-05-26T19:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}], \"InnerCalendarId\":\"a2b8c199-d1be-eb11-a81d-000d3a6e4359\"}]}"
}

Respuesta

{
  "InnerCalendarIds": "[\"a2b8c199-d1be-eb11-a81d-000d3a6e4359\"]"
}

Borre una periodicidad personalizada de horario laboral

Tim tiene que borrar todo su horario porque ha decidido dejar la empresa. Debbie usa la API msdyn_DeleteCalendar aquí.

Solicitar

{
 "CalendarEventInfo": "{\"CalendarId\":\"a68245c9-ba2e-4496-9c18-3bee75fda396\",\"EntityLogicalName\":\"bookableresource\",\"InnerCalendarId\":\"34d2210c-9fb6-eb11-a820-000d3afb1dba\",\"IsVaried\":true}"
}

Respuesta

{
  "InnerCalendarIds": "[\"a2b8c199-d1be-eb11-a81d-000d3a6e4359\", \"942bda0f-d3be-eb11-a81d-000d3a6e4359\"]"
}

Cree una indisponibilidad

Tim se tomará tres días libres para unas vacaciones familiares a partir del 9 de junio de 2021.

Solicitud

{
 "CalendarEventInfo": "{\"CalendarId\":\"a68245c9-ba2e-4496-9c18-3bee75fda396\",\"InnerCalendarDescription\":\"Family Vacation\",\"EntityLogicalName\":\"bookableresource\",\"TimeZoneCode\":5,\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-06-15T00:00:00.000Z\",\"EndTime\":\"2021-06-17T00:00:00.000Z\",\"Effort\":1,\"WorkHourType\":3}]}]}"
}

Response

{
  "InnerCalendarIds": "[\"266c434e-d5be-eb11-a81d-000d3a6e4359\"]"
}

Cree horas de trabajo de todo el día

Tim tiene un turno de 72 horas a partir del 20 de mayo de 2021. Debbie usa la API msdyn_SaveCalendar para crear las horas laborales de Tim.

Solicitar

{
 "CalendarEventInfo": "{\"CalendarId\":\"a68245c9-ba2e-4496-9c18-3bee75fda396\",\"EntityLogicalName\":\"bookableresource\",\"TimeZoneCode\":5,\"RulesAndRecurrences\":[{\"Rules\":[{\"StartTime\":\"2021-05-20T00:00:00.000Z\",\"EndTime\":\"2021-05-22T00:00:00.000Z\",\"Effort\":1,\"WorkHourType\":0}]}]}"
}

Respuesta

{
  "InnerCalendarIds": "[\"6e160a8e-d5be-eb11-a81d-000d3a6e4359\"]"
}

Preguntas frecuentes de

Recibo el error "La hora de inicio no puede ser posterior o igual a la hora de finalización".

Asegúrese de que no haya superposiciones en los intervalos de tiempo de las diferentes reglas del calendario. Verifique las fechas para asegurarse de que StartTime no sea posterior a EndTime. Además, verifique que las horas sigan el formato de 24 horas.

¿Se pueden utilizar las API para actualizar la entidad "Plantillas de horas de trabajo"?

Sí, puede utilizar esta API para crear y actualizar plantillas de horas de trabajo además de las horas de trabajo de los recursos.

Recibo el error, "Se produjo un error al deserializar el objeto de tipo Microsoft.Dynamics.UCICalendar.Plugins.SaveCalendarContract+CalendarEventInfo. La fuente de entrada no está formateada correctamente.
or
Esperando estado 'Element'. Encontrado 'Text' con el nombre '', espacio de nombres ''."

Asegúrese de que la cadena se haya analizado correctamente. Es posible que falten corchetes, comas o punto y coma.

Recibo el error, "Patrón de repetición no válido. Consulte la documentación para ver los idiomas compatibles".

Actualmente solo admitimos este patrón: FREQ=DAILY;INTERVAL=1;BYDAY=SU,MO,TU,WE,TH,FR,SA. BYDAY se puede cambiar para incluir menos días; sin embargo, FREQ e INTERVAL no se pueden cambiar. Asegúrese de que no haya espacios en el patrón.

¿Cómo obtenemos información de CalendarId y InnerCalendarId del recurso?

CalendarId se puede recuperar de los atributos de los recursos. Haga esta llamada para obtener esta información: [org-url]/api/data/v9.1/bookableresources([bookableresourceGUID]).

Un ejemplo de la llamada anterior sería [org-url]/api/data/v9.1/bookableresources(7bb0224b-6712-ec11-94f9-000d3a6d888e).

InnerCalendarId se puede recuperar de los atributos del calendario. Haga esta llamada para obtener esta información: [org-url]/api/data/v9.1/calendars([calendar-id-from-above-call])?$expand=calendar_calendar_rules.

Un ejemplo de la llamada anterior es [org-url]/api/data/v9.1/calendars(02481736-1b6a-4d49-9ebd-a5bd041c1c99)?$expand=calendar_calendar_rules.

¿Qué sucede si hay reglas superpuestas?

Hay un par de rangos diferentes a los que se aplican las reglas:

  • Rango 1: ocurrencia diaria (laboral/no laboral) y ocurrencia de tiempo libre.
  • Rango 0: recurrencia semanal (laboral/no laboral).

Reglas superpuestas V2

  • Las reglas de Rango 1 tienen mayor prioridad que las reglas de Rango 0. Entonces, si hay dos reglas (una de cada rango) en el mismo día, la ocurrencia diaria o la ocurrencia de tiempo libre tiene prioridad sobre la repetición semanal.
  • Cuando hay varias reglas de Rango 0 dentro del mismo período de tiempo:
    • Si los tiempos no se cruzan, ambos permanecerán en el calendario.
    • Si las horas se intersecan, la regla que se creó o modificó más recientemente será la que se considere para el calendario del recurso. Todas las demás reglas de intersección en el intervalo de fechas se eliminan. Si algunas reglas de rango 0 tienen intersecciones en algunas fechas pero no en otras, la regla se empalma para conservar las secciones que no se cruzan, mientras que las partes que se cruzan se eliminan.

Ejemplos de comportamiento del calendario V2:

Ejemplo 1 - Repetición de horas de trabajo: fechas superpuestas sin días/horas superpuestas

Para un período de tiempo determinado, un técnico trabaja en turnos de mañana, tarde o noche en diferentes días.

  1. Cree una primera regla de calendario repetitivo para un intervalo de fechas determinado. Por ejemplo: Repetir lunes, martes; 1.1-4.1; 8 a. m. a 5 p. m. hora del Este.

  2. Cree una segunda regla de calendario repetitivo para un rango de fechas que se cruzan, mientras se asegura de que las horas de trabajo no se crucen con los días u horas anteriores. Por ejemplo: Repetir miércoles, jueves; 1.1-4.1; 8 a. m. a 5 p. m. hora del Este o Repetir lunes, martes; 1.1-4.1; 5:00 p. m. a 8:00 p. m. hora del Este.

Resultado: ambas reglas del calendario se mantienen y coexisten una junto a la otra.

Ejemplo 2: Horario laboral repetido: algunas fechas superpuestas, con todos los días superpuestos y la segunda regla comienza/finaliza antes o después de la primera regla

Un técnico obtiene un nuevo horario de trabajo, que reemplaza algunas semanas de su antiguo horario. Por contrato siempre trabajan los mismos días cada semana.

  1. Cree una primera regla de calendario repetitivo para un intervalo de fechas determinado. Por ejemplo: Repetir lunes, martes; 1.1-4.1; 8 a. m. a 5 p. m. hora del Este.

  2. Cree una segunda regla de calendario repetitivo para un rango de fechas superpuestas, donde todos los días tienen horas de trabajo superpuestas. Elija fechas de inicio/finalización para esta nueva regla que sean anteriores o posteriores a la fecha de inicio/finalización de la primera regla. Por ejemplo: Repetir lunes, martes; 1.1-4.1; 1 p. m. a 8 p. m. hora del Este.

Resultado: la primera regla se trunca para acomodar la fecha de inicio/finalización de la segunda regla. Por ejemplo: Repetir lunes, martes; 2.1-2.28; 8 a. m. a 5 p. m. hora del Este Y Repetir lunes, martes; 3.1-5.1; 1 p. m. a 8 p. m. hora del Este.

Ejemplo 3 - Repetición de horas de trabajo: Todas las fechas superpuestas con algunos días/horas superpuestos

El técnico es un trabajador contratado por un período fijo de 2 meses. Han acordado asumir trabajo adicional en algunos días. Quieren cambiar el horario de trabajo de los martes a un horario más temprano o más tarde.

  1. Cree algunas reglas de calendario repetitivo para un intervalo de fechas determinado. Por ejemplo: Repetir lunes, martes; 2.1-4.1; 8 a. m. a 12 p. m. hora del Este Y Repetir martes, miércoles; 2.1-4.1, de 1 p. m. a 5 p. m., hora del Este.

  2. Cree una nueva regla de calendario repetitivo para el mismo intervalo de fechas. Elija días/horas que se superpongan parcialmente con las reglas originales. Por ejemplo: Repetir martes, jueves; 2.1-4.1; 10 a. m. a 2 p. m. hora del Este.

Resultado: la nueva regla sobrescribe la anterior donde hay superposiciones y deja las demás sin cambios. Por ejemplo: Repetir lunes; 2.1-4.1; 8 am-12 pm ET Y Repetir miércoles; 2.1-4.1; 1 p. m.-5 p. m. ET Y Repetir martes, jueves; 2.1-4.1; 10 am-2 pm hora del Este.

Ejemplo 4: horas de trabajo repetitivas: las fechas de la regla nueva están contenidas en la regla anterior, algunos días/horas se superponen

Un técnico trabaja de 8 am a 5 pm, de lunes a viernes, todas las semanas. Solo durante dos semanas, manejarán un proyecto especial de emergencia todos los lunes a miércoles con diferentes horas de trabajo de 6 am a 6 pm.

  1. Cree una primera regla de calendario repetitivo para un intervalo de fechas determinado. Por ejemplo: Repetir lunes, martes, miércoles, jueves, viernes; 1.1-Sin fecha de finalización; 8 am-5 pm hora del Este.

  2. Cree una segunda regla de calendario repetitivo contenida dentro del rango de fechas anterior, elija horas de trabajo que se superpongan en algunos días. Por ejemplo: Repetir lunes, martes, miércoles; 5.1-5.14; 6 am-6 pm ET.

Resultado: El calendario debe tener cuatro reglas repetitivas al final de este ejercicio:

  • Truncar la primera regla a la fecha de inicio de la segunda regla
  • la segunda regla de calendario
  • cree una nueva regla similar a la primera regla pero con las fechas de la segunda regla para los días que no se superponen
  • Truncar la primera regla para que comience desde la fecha de finalización de la segunda regla, sin fecha de finalización

Por ejemplo: Repetir lunes, martes, miércoles, jueves, viernes; 1.1–4.30; 8 am-5 pm ET Y Repetir lunes, martes, miércoles; 5.1-5.14; 6 am-6 pm ET Y Repetir jueves, viernes, 5.1-5.14; 8 am-5 pm ET Y Repetir lunes, martes, miércoles, jueves, viernes; 5.15–Sin fecha de finalización; 8 a. m. a 5 p. m. hora del Este

Ejemplo 5 - Horas de trabajo no repetitivas (ocurrencia, regla de rango 1)

Un técnico tiene varios días de cohesión de equipo, que tienen prioridad sobre todas las demás instancias de horas de trabajo del día.

  1. Cree una regla de calendario repetitivo para un intervalo de fechas determinado. Por ejemplo: Repetir lunes, martes, miércoles, jueves, viernes; 1.1-Sin fecha de finalización; 8 am-5 pm hora del Este.

  2. Cree una regla de calendario no repetitiva contenida dentro del intervalo de fechas anterior. Elija horas de trabajo que se superpongan en algunos días. Por ejemplo: No repetir; 6.21; 7 am-1 pm ET.

Resultado: El calendario debe tener 1 regla no repetitiva (ocurrencia) al final del ejercicio. La regla de no repetición anula el evento de repetición superpuesto durante todo el día. Por ejemplo: Repetir lunes, martes, miércoles, jueves, viernes; 1.1-Sin fecha de finalización excepto 6.21; no repetir; 6.21; 7 am-1 pm ET.

Reglas superpuestas V1

  • Las reglas de Rango 1 tienen mayor prioridad que las reglas de Rango 0. Entonces, si hubiera dos reglas (una de cada rango) en el mismo día, la ocurrencia diaria o la ocurrencia de tiempo libre tiene prioridad sobre la repetición semanal.
  • Si hay dos reglas del mismo rango, la regla que se creó o modificó más recientemente será la que se considere para el calendario del recurso.
  • Tenga en cuenta que las ocurrencias de todo el día son de Rango 1, por lo que es posible que desee considerar cambiarlo a una recurrencia semanal para poder agregar horas de trabajo de ocurrencia y hacer que se respeten.
  • Cuando existe una hora de trabajo y se crea una ocurrencia de tiempo libre superponiéndola, las reglas se dividen de una manera que garantiza que se respete el tiempo libre, y cualquier tiempo restante en forma de horas de trabajo permanecerá como está. Por ejemplo, si hay horas de trabajo de 8:00 horas a 17:00 horas el 21 de septiembre y se agrega un tiempo libre de 15:00 horas a 17:00 horas el 21 de septiembre, esto se resolvería como horario de trabajo de 8:00 horas a 15:00 horas y tiempo libre de 15:00 horas a 19:00 horas. Sin embargo, si las reglas se crearon en el orden opuesto (primero se creó el tiempo libre y luego se crearon las horas de trabajo) independientemente de las franjas horarias, solo se volvería a seleccionar la hora de trabajo. El tiempo libre se anularía.

Códigos de zona horaria

Enumeración Zona horaria
0 (GMT-12:00) Línea internacional de cambio de fecha oeste
1 (GMT+13:00) Samoa
2 (GMT-10:00) Hawái
3 (GMT-09:00) Alaska
4 (GMT-08:00) Hora del Pacífico (EE. UU. y Canadá)
5 (GMT-08:00) Baja California
6 (GMT-11:00) Hora universal coordinada-11
7 (GMT-10:00) Islas Aleutianas
8 (GMT-09:30) Islas Marquesas
9 (GMT-09:00) Hora universal coordinada-09
10 (GMT-07:00) Hora de las Montañas Rocosas (EE. UU. y Canadá)
11 (GMT-08:00) Hora universal coordinada-08
12 (GMT-07:00) Chihuahua, La Paz, Mazatlán
15 (GMT-07:00) Arizona
20 (GMT-06:00) Hora central (EE. UU. y Canadá)
25 (GMT-06:00) Saskatchewan
29 (GMT-06:00) Guadalajara, Ciudad de México, Monterrey
33 (GMT-06:00) América Central
34 (GMT-06:00) Isla de Pascua
35 (GMT-05:00) Hora oriental (EE. UU. y Canadá)
40 (GMT-05:00) Indiana (Este)
43 (GMT-05:00) Haití
44 (GMT-05:00) La Habana
45 (GMT-05:00) Bogotá, Lima, Quito, Rio Branco
47 (GMT-04:00) Caracas
50 (GMT-04:00) Hora del Atlántico (Canadá)
51 (GMT-05:00) Islas Turcas y Caicos
55 (GMT-04:00) Georgetown, La Paz, San Juan
56 (GMT-04:00) Santiago
58 (GMT-04:00) Cuiabá
59 (GMT-04:00) Asunción
60 (GMT-03:30) Terranova
65 (GMT-03:00) Brasilia
69 (GMT-03:00) Buenos Aires
70 (GMT-03:00) Cayena, Fortaleza
71 (GMT-03:00) Salvador
72 (GMT-03:00) San Pedro y Miquelón
73 (GMT-03:00) Groenlandia
74 (GMT-03:00) Montevideo
75 (GMT-02:00) Atlántico Central
76 (GMT-02:00) Hora universal coordinada-02
77 (GMT-03:00) Araguaína
80 (GMT-01:00) Azores
83 (GMT-01:00) Islas de Cabo Verde
84 (GMT+01:00) Casablanca
85 (GMT+00:00) Dublín, Edimburgo, Lisboa, Londres
90 (GMT+00:00) Monrovia, Reikiavik
92 (GMT) Hora universal coordinada
95 (GMT+01:00) Belgrado, Bratislava, Budapest, Liubliana, Praga
100 (GMT+01:00) Sarajevo, Skopie, Varsovia, Zagreb
105 (GMT+01:00) Bruselas, Copenhague, Madrid, París
110 (GMT+01:00) Ámsterdam, Berlín, Berna, Roma, Estocolmo, Viena
113 (GMT+01:00) África Central Occidental
115 (GMT+02:00) Chisinau
120 (GMT+02:00) Cairo
125 (GMT+02:00) Helsinki, Kiev, Riga, Sofía, Tallin, Vilna
129 (GMT+02:00) Ammán
130 (GMT+02:00) Atenas, Bucarest
131 (GMT+02:00) Beirut
133 (GMT+02:00) Damasco
134 (GMT+03:00) Estambul
135 (GMT+02:00) Jerusalén
140 (GMT+02:00) Harare, Pretoria
141 (GMT+02:00) Windhoek
142 (GMT+02:00) Gaza, Hebrón
145 (GMT+03:00) Moscú, San Petersburgo
150 (GMT+03:00) Kuwait, Riad
151 (GMT+03:00) Minsk
155 (GMT+03:00) Nairobi
158 (GMT+03:00) Bagdad
159 (GMT+02:00) Kaliningrado
160 (GMT+03:30) Teherán
165 (GMT+04:00) Abu Dhabi, Mascate
169 (GMT+04:00) Bakú
170 (GMT+04:00) Ereván
172 (GMT+04:00) Port Louis
173 (GMT+04:00) Tiflis
174 (GMT+04:00) Izhevsk, Samara
175 (GMT+04:30) Kabul
176 (GMT+04:00) Astrakhan, Ulyanovsk
180 (GMT+05:00) Ekaterimburgo
184 (GMT+05:00) Islamabad, Karachi
185 (GMT+05:00) Taskent
190 (GMT+05:30) Chennai, Kolkata (Calcuta), Mumbai, Nueva Delhi
193 (GMT+05:45) Katmandú
195 (GMT+06:00) Astaná
196 (GMT+06:00) Dacca
197 (GMT+06:00) Omsk
200 (GMT+05:30) Sri Jayawardenepura
201 (GMT+07:00) Novosibirsk
203 (GMT+06:30) Yangón (Rangún)
205 (GMT+07:00) Bangkok, Hanói, Yakarta
207 (GMT+07:00) Krasnoyarsk
208 (GMT+07:00) Barnaul, Gorno-Altaysk
209 (GMT+07:00) Hovd
210 (GMT+08:00) Beijing, Chongqing, RAE de Hong Kong, Urumqi
211 (GMT+07:00) Tomsk
215 (GMT+08:00) Kuala Lumpur, Singapur
220 (GMT+08:00) Taipéi
225 (GMT+08:00) Perth
227 (GMT+08:00) Irkutsk
228 (GMT+08:00) Ulán Bator
229 (GMT+09:00) Pyongyang
230 (GMT+09:00) Seúl
231 (GMT+08:45) Eucla
235 (GMT+09:00) Osaka, Sapporo, Tokio
240 (GMT+09:00) Yakutsk
241 (GMT+09:00) Chita
245 (GMT+09:30) Darwin
250 (GMT+09:30) Adelaida
255 (GMT+10:00) Canberra, Melbourne, Sídney
260 (GMT+10:00) Brisbane
265 (GMT+10:00) Hobart
270 (GMT+10:00) Vladivostok
274 (GMT+10:30) Isla Lord Howe
275 (GMT+10:00) Guam, Port Moresby
276 (GMT+11:00) Isla Bougainville
277 (GMT+11:00) Isla Norfolk
278 (GMT+11:00) Sajalín
279 (GMT+11:00) Chokurdakh
280 (GMT+11:00) Islas Salomón, Nueva Caledonia
281 (GMT+11:00) Magadán
284 (GMT+12:00) Hora universal coordinada +12
285 (GMT+12:00) Fiyi
290 (GMT+12:00) Auckland, Wellington
295 (GMT+12:00) Anadyr, Petropavlovsk-Kamchatsky
299 (GMT+12:45) Islas Chatham
300 (GMT+13:00) Nuku'alofa
301 (GMT-05:00) Chetumal
302 (UTC+02:00) Jartum
303 (GMT-03:00) Punta Arenas
304 (GMT+04:00) Volgogrado
305 (GMT-07:00) Yukón