c# - Empezando con Noda Time
.net datetime (1)
Estaba planeando convertir estos horarios a UTC / Noda Instants para evitar la necesidad de almacenar toda la información de la zona horaria con cada fecha en la base de datos.
Eso está bien si no necesitas saber la zona horaria original más adelante. (p. ej., si el usuario cambia la zona horaria, pero aún quiere algo recurrente en la zona horaria original).
De todos modos, lo separaría en tres pasos:
- Análisis en un
LocalDateTime
- Convertir eso en un
ZonedDateTime
- Convertir eso en un
Instant
Algo como:
// TODO: Are you sure it *will* be in the invariant culture? No funky date
// separators?
// Note that if all users have the same pattern, you can make this a private
// static readonly field somewhere
var pattern = LocalDateTimePattern.CreateWithInvariantCulture("yyyy/MM/dd HH:mm");
var parseResult = pattern.Parse(userSubmittedDateTimeString);
if (!parseResult.Success)
{
// throw an exception or whatever you want to do
}
var localDateTime = parseResult.Value;
var timeZone = DateTimeZoneProviders.Tzdb[userTimeZone];
// TODO: Consider how you want to handle ambiguous or "skipped" local date/time
// values. For example, you might want InZoneStrictly, or provide your own custom
// handler to InZone.
var zonedDateTime = localDateTime.InZoneLeniently(timeZone);
var instant = zonedDateTime.ToInstant();
Estoy buscando usar el tiempo de Noda para una aplicación bastante simple, sin embargo, estoy luchando por encontrar cualquier documentación para manejar un caso de uso muy básico:
He iniciado sesión en un usuario y almacenaré su zona horaria preferida en la configuración. Cualquier fecha / hora que venga del cliente viene en un formato de texto conocido (por ejemplo, "dd / MM / aaaa HH: mm"), con una identificación de zona horaria conocida (por ejemplo, "Europa / Londres"). Estaba planeando convertir estos tiempos a UTC / Noda Instants para evitar la necesidad de almacenar la información de zona horaria con cada fecha en la base de datos.
En primer lugar, ¿esto suena como un enfoque sensato? Soy libre de cambiar casi cualquier cosa, por lo que me complacería recibir un curso mejor / más sensato. La base de datos es MongoDb, utilizando el controlador C #.
Lo que he intentado es en este sentido, ¡pero luchando por superar el primer paso!
var userSubmittedDateTimeString = "2013/05/09 10:45";
var userFormat = "yyyy/MM/dd HH:mm";
var userTimeZone = "Europe/London";
//noda code here to convert to UTC
//Then back again:
Sé que alguien preguntará "qué has intentado", a lo que todo lo que tengo son varias conversiones fallidas. ¡Feliz de ser señalado en la página "Cómo empezar a usar Noda"!