Retorno incorreto de campos DateTime em consulta REST no SharePoint

Retorno incorreto de campos DateTime em consulta REST no SharePoint

2017-02-08 Off Por gambin

Olá Pessoal!

Recentemente identifiquei um problema quando precisei usar uma consulta REST em uma lista do SharePoint, porém nessa query iria utilizar o current DateTime para filtro de determinado range de período. Aí começou um problema…

Mas antes de nos aventurarmos no troubleshooting, seria interessante entendermos um pouco mais sobre o modelo de gravação de dados do tipo Date/ Time no content database.

A priori os dados são salvos sempre no formato UTC e considerando o meridiano de Greenwich (UTC-0):

Maiores detalhes: https://msdn.microsoft.com/en-us/library/hh656481(v=office.12).aspx

E é aí que a magia acontece… Dependendo das configurações regionais (e fuso) a nível de usuário, site e web application, o horário poderá ser exibido de maneira diferente como uma “máscara”, porém o dado salvo no content database SEMPRE será referente ao UTC-0 (e não ao UTC “regional”).

Outro fator importante que poderá ainda impactar o caso é o horário de verão, que também já detalhamos sua configuração para o SharePoint neste post!

 

Dadas todas as explicações técnicas, o que acontece mesmo com a query rest??

Ela não respeita as configurações regionais! Portanto se você está utilizando o “current DateTime” para obter dados de algum range de data, fique atento, pois o retorno dos campos do tipo DateTime em uma consulta no content database irá considerar o UTC-0!

 

Como resolver?

Simples! Para Javascript temos o seguinte modelo:

// http://www.w3schools.com/jsref/jsref_gettimezoneoffset.asp
function getUtcFormat(oDate){
	var offset = new Date().getTimezoneOffset();
	return Date(oDate.setMinutes(oDate.getMinutes() + offset));
}

var myDate = new Date();
var myDateUtc = getUtcFormat(myDate);

console.log(myDate);
console.log(myDateUtc);

E para C#

System.TimeZone.CurrentTimeZone.ToLocalTime(date)

 

Espero que tenha ajudado e até o próximo post 😉