¿Hay alguna manera de obtener la fecha 1 de enero de 1970 Greenwich Mean Time en un datetime?.NET Greenwich Mean Time
si sólo tiene que especificar la nueva fecha (1970, 1, 1) voy a conseguirlo con mi zona horaria actual ..
¿Hay alguna manera de obtener la fecha 1 de enero de 1970 Greenwich Mean Time en un datetime?.NET Greenwich Mean Time
si sólo tiene que especificar la nueva fecha (1970, 1, 1) voy a conseguirlo con mi zona horaria actual ..
GMT es igual a UTC (Coordinate d Universal Time), más o menos (a menos que se trate de fracciones de segundos, no hay diferencia). DateTimeKind, una enumeración que le permite elegir si desea mostrar la hora en su zona horaria local o en UTC, está integrada en el DateTime constructor. Usando esto, podemos lograr el equivalente de GMT.
El constructor que estamos buscando a utilizar es la siguiente:
DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, DateTimeKind kind)
o (en un solo hay un argumento milisegundos, en el otro no lo es):
DateTime(int year, int month, int day, int hour, int minute, int second, DateTimeKind kind)
Para obtener un DateTime para 1 de enero de 1970 en UTC, esto es lo que podemos usar:
DateTime inGMT = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); //using 1st constructor above
o:
DateTime inGMT = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); //using 2nd constructor above
NOTA: El contenido de la DateTimeKind enumeración son a continuación:
ACTUALIZACIÓN: Thomas Levesque propuso una solución muy creativa en su respuesta, sin embargo no estoy seguro de si es el método más directo y si es un método viable que puede ser utilizado para cualquier zona horaria. Lo que creo que está diciendo es que puede calcular el DateTimeOffset desde DateTime.Now y DateTime.UtcNow, y aplique la compensación calculada al 1 de enero de 1970 en su propia zona horaria, que le da la hora UTC/GMT. No estoy seguro de que haya métodos simples para calcular las compensaciones a otras zonas horarias, y esto se convierte en un poco redundante para la pregunta.
ACTUALIZACIÓN # 2: Agregué otro constructor DateTime que logra lo mismo, pero carece del argumento de milisegundos. Ellos son intercambiables.
GMT es, a todos los efectos prácticos, lo mismo que GMT.
Esto significa que puede simplemente usar uno de los DateTime
constructors que toma un parámetro DateTimeKind
, configurándolo en DateTimeKind.Utc
.
DateTime gmt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
UTC no es exactamente GMT - GMT obedece DLT (horario de verano), aunque es la mayor parte del tiempo equivalente. – Noldorin
UTC y GMT solo difieren en fracciones de segundo. GMT no tiene horario de verano. – Erik
@Noldorin: GMT y UTC * son lo mismo *, a todos los efectos. GMT * no * obedece al horario de verano: en el Reino Unido actualmente es BST que es GMT + 1. http://en.wikipedia.org/wiki/Greenwich_Mean_Time – LukeH
Consulte la estructura de
DateTimeOffset
EDIT: En realidad, después de leer más acerca DateTimeOffset
, que podría no ser la solución más adecuada para lo que estamos tratando de hacer ... Creo que esto es la respuesta más directa a su pregunta:
DateTime epoch = DateTime.SpecifyKind(new DateTime(1970, 1, 1), DateTimeKind.Utc);
¡Usar DateTimeOffset sería una solución muy interesante! ¿Podría darnos algún código de muestra para mostrar cómo piensa usarlo para encontrar la hora GMT? ¿Va a encontrar el desplazamiento entre DateTime.Now y DateTime.UtcNow y luego aplicar el desplazamiento al 1 de enero de 1970 en su propia zona horaria? ¿O hay un enfoque más directo? ¡Muy interesante! –
Además, ¿podría este enfoque (según mi interpretación de su respuesta, como se explica en el comentario anterior) funcionar para cada zona horaria a la que desea convertir? En otras palabras, ¿hay algo similar a DateTime.UtcNow disponible para otras zonas horarias? Si no, no creo que esta sea una solución universal viable. –
@Thomas: No estoy de acuerdo con que esta sea "la respuesta más directa" a la pregunta: estás construyendo el 'DateTime' y luego llamando al método' SpecifyKind'. El mismo resultado se puede lograr simplemente llamando a un constructor diferente, sin necesidad de una llamada de método extra. (Vea mi respuesta para más detalles.) – LukeH
GMT * no * obedece el horario de verano. http://en.wikipedia.org/wiki/Greenwich_Mean_Time – LukeH
Disculpa, fue un error. Fijo. –