J'ai un horodatage de serveur SQL que je dois convertir en représentation du temps en millisecondes depuis 1970. Puis-je le faire avec du SQL pur? Sinon, je l'ai extrait dans une variable DateTime
en C #. Est-il possible d'obtenir une représentation millisec de cela?
Merci,
Teja.
Vous essayez probablement de convertir en un horodatage de type UNIX, qui sont au format UTC:
yourDateTime.ToUniversalTime().Subtract(
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
).TotalMilliseconds
Cela évite également les problèmes d’été, car UTC n’en a pas.
En C #, vous pouvez écrire
(long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds
A partir de .NET 4.6, vous pouvez utiliser un objet DateTimeOffset
pour obtenir les millisecondes unix. Il a un constructeur qui prend un objet DateTime
, vous pouvez donc simplement passer votre objet comme indiqué ci-dessous.
DateTime yourDateTime;
long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();
Comme indiqué dans d'autres réponses, assurez-vous que yourDateTime
a bien spécifié Kind
ou utilisez .ToUniversalTime()
pour le convertir d'abord en heure UTC.
Ici vous pouvez en apprendre davantage sur DateTimeOffset
.
SELECT CAST(DATEDIFF(S, '1970-01-01', SYSDATETIME()) AS BIGINT) * 1000
Cela ne vous donne pas une précision totale, mais DATEDIFF(MS...
provoque un débordement. Si les secondes suffisent, cela devrait le faire.
Cette autre solution pour convertir datetime en timestamp unix millis C #.
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static long GetCurrentUnixTimestampMillis()
{
DateTime localDateTime, univDateTime;
localDateTime = DateTime.Now;
univDateTime = localDateTime.ToUniversalTime();
return (long)(univDateTime - UnixEpoch).TotalMilliseconds;
}
En utilisant la réponse de Andoma, voici ce que je fais
Vous pouvez créer une structure ou une classe comme celle-ci
struct Date
{
public static double GetTime(DateTime dateTime)
{
return dateTime.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
}
public static DateTime DateTimeParse(double milliseconds)
{
return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(milliseconds).ToLocalTime();
}
}
Et vous pouvez utiliser ceci dans votre code comme suit
DateTime dateTime = DateTime.Now;
double total = Date.GetTime(dateTime);
dateTime = Date.DateTimeParse(total);
J'espère que cela vous aide
angular dit à propos de date
parater:
Date à formater en tant qu'objet Date, millisecondes (chaîne ou nombre) ou divers formats de chaîne datetime ISO 8601 (par exemple, aaaa-MM-jjTHH: mm: ss.sssZ et ses versions plus courtes telles que aaaa-MM-jjTHH: mmZ, aaaa-MM-jj ou aaaaMMjjHHmmssZ). Si aucun fuseau horaire n'est spécifié dans l'entrée de chaîne, l'heure est considérée comme étant dans le fuseau horaire local.
La réponse d'Andomar est la date/heure convertie en millisecondes.
Et vous devriez regarder les liens suivants.
https://docs.angularjs.org/api/ng/filter/date
Étant donné un objet DateTime, comment puis-je obtenir une date ISO 8601 au format chaîne?