# Timezone (Fuso Horario do sistema)

<p class="callout info">A plataforma pode ser configurada para visualizar as **horas em qualquer Timezone**</p>

O **servidor** está configurado **SEMPRE** para **UTC**.

O **banco de dados** grava todas as informações **SEMPRE** como **UTC**.

A plataforma pode ser configurada para visualizar as horas em qualquer Timezone (a nível de tenant).

Cada usuario pode ter o seu próprio Timezone para visualizaão dos dados e a plataforma também terá um timezone padrão.

Por exemplo. Se sua equipe está em São Paulo - Brasil e outra em NY - Estados Unidos, vc pode configurar uma timezone padrão para a plataforma, exemplo, America/Sao\_Paulo e também pode configurar para que cada usuario visualize a hora de acordo com sua localidade. Independente da forma que visualizará a informação será salva no banco de dados como UTC.

Importante dizer é que no **C#**, em caso de uso do `DateTime.Now` ou derivados. A data sempre estará em UTC. Para converter, use a extensão `.ToUserTimeZone`

Exemplo:

```C#
//exemplo: retorna 22/07/2024 22:37:00
var utcDate = DateTime.Now; 

//exemplo: caso o TimeZone do user seja America/Sao_Paulo (-3) retornaria 22/07/2024 19:37:00
var userTimezoneDate = DateTime.Now.ToUserTimeZone(); 
```

#### Api e Api User

<p class="callout info">Nas execuções de API sempre prevalecerá o Timezone definido no momento do cadastrado no User API</p>

Em caso de Api, você pode definir o Timezone da execução no cadastro do **Usuario de API,** será esse timezone que o sistema considerará ao executar uma API

**Acesse o Cadastro de Usuário de Api (Api User) e defina o timezone como na imagem abaixo:**

![](https://wiki.agilityflow.io/uploads/images/gallery/2024-07-Jul/scaled-840-0/image-1721682431281.png)

#### Programação na API com C# (Custom code)

Na Api **C#**, em caso de uso do `DateTime.Now` ou derivados. A data sempre estará em UTC. Para converter para a Timezone do User que está executando a API, utilize a extensão `.ToUserTimeZone` como no exemplo abaixo.

```C#
//exemplo: retorna 22/07/2024 22:37:00
var utcDate = DateTime.Now; 

//exemplo: caso o TimeZone do user seja America/Sao_Paulo (-3) retornaria 22/07/2024 19:37:00
var userTimezoneDate = DateTime.Now.ToUserTimeZone(); 
```

No método C# `ApiContext.SaveEntityAsync`, o sistema automaticamente irá converter as datas recebidas por parametro para UTC no momento de salvar no banco de dados, então é importante que a API receba a data no Timezone definido nas configurações do Usuário de API. Exemplo:

Se vc tem uma entidaide chamada Tarefa, e nessa tarefa você tem um campo de Data de entrega que vc gostaria que fosse a data 27/12/2024 23:55:55 no horario de São Paulo.

1\. Você deve configurar o seu **Usuario de API** para ter o TimeZone de **São Paulo.**

2\. Você deve mandar a data com o horario **27/12/2024 23:55:55**

3\. Você não deve se preocupar com a conversão para UTC ao salvar no banco de dados, pois a conversão será feita automaticamente pelo sistema.