Trabajo en una industria extraña e irracional donde tenemos que poder representar la hora del día como de 06:00:00 a 30:00:00 en lugar de 0:00:00 a las 24:00:00. ¿Hay alguna forma de hacer esto usando el tipo DateTime? Si trato de construir un tiempo de fecha con un valor de hora mayor que 24, arroja una excepción.Almacenar más de 24 horas en un DateTime
Respuesta
¿Qué le parece usar un TimeSpan en su lugar?
DateTime departure = new DateTime(2010, 6, 12, 18, 32, 0);
DateTime arrival = new DateTime(2010, 6, 13, 22, 47, 0);
TimeSpan travelTime = arrival - departure;
Console.WriteLine("{0} - {1} = {2}", arrival, departure, travelTime);
A continuación, utilice la propiedad TotalHours
del TimeSpan obj
Lo intenté con TimeSpan, sin embargo, cualquier horario superior a 24 pasará al día. Entonces, por ejemplo, 36:00:00 terminaría siendo 1: 12: 00: 00 como un TimeSpan. – Rob
¿Cómo es esto un problema? Simplemente use suTimeSpan.TotalHours. –
@Rob usa la propiedad TotalHours del obj TimeSpan entonces. – Gabe
dudo que puede hacer exactamente lo que está buscando, pero espero que usted podría hacer su propia clase DateTime que no hace sino aumentar +6 horas al valor. es decir, almacena 00 - 24 internamente, pero los métodos get/set hacen que parezca 06 - 30.
Sí, puede heredar de la clase de tiempo de fecha existente y anular los métodos/propiedades que implican la hora –
@Chris Simpson, no puede heredar de la estructura DateTime existente. –
Necesita usar TimeSpan para algo como esto. – Gabe
Solo tiene su lógica de negocios store/return DateTime.Hours.Add (6). Tendrás que ser consciente de esto en tu lógica de visualización.
cómo usar un DateTime normal para almacenar la hora actual, y escribir una nueva clase que almacena (o deriva de) un DateTime, y tiene un ToString() que ajusta la salida.
- Debe utilizar TimeSpan, no DateTime.
Las opciones de formato para TimeSpan es
a: [días] [horas]:. [Minutos]: [segundos] [segundos fraccionarios]
B:. [Días] [horas].: [minutos]: [segundos]
c:. [días] [horas]: [minutos]
d: [días] [horas]
e:. [días]
f: [hora]: [minutos]: [segundos] [segundos fraccionarios]
G:. [Hora]: [minutos]: [segundos]
h: [hora]: [minutos]
Gracias, estoy totalmente de acuerdo :) – Gabe
Creo que esto debería ser solo un problema de presentación.
Permita que los usuarios ingresen datos en este formato extraño e inmediatamente conviértalo a UTC. Haga todos los cálculos en las horas UTC. A continuación, cree un método ToString para convertir los resultados nuevamente en su formato extraño. Probablemente también necesite otros métodos y propiedades de utilidad, como una implementación de WeirdDateTime.Day
.
Puede escribir una clase contenedora alrededor de un DateTime y tener todos los métodos de conversión y utilidad que necesita en esa clase. He intentado iniciarlo al implementar el análisis de una cadena en un formato extraño. Esto no es un código de producción listo de ninguna manera, pero quizás le puede dar algunas ideas de cómo puede acercarse a esto:
class WeirdDateTime
{
public DateTime DateTime { get; set; }
public WeirdDateTime(int year, int month, int day, int hour, int minute, int second, DateTimeKind kind)
{
if (hour < 6 || hour >= 30)
throw new ArgumentException("Not a valid WeirdDateTime", "hour");
bool addDay;
if (hour >= 24)
{
addDay = true;
hour -= 24;
}
else
{
addDay = false;
}
DateTime dateTime = new DateTime(year, month, day, hour, minute, second, kind);
if (addDay)
dateTime = dateTime.AddDays(1);
DateTime = dateTime;
}
public static WeirdDateTime Parse(string s)
{
Regex regex = new Regex(@"(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})");
Match match = regex.Match(s);
if (!match.Success)
throw new FormatException("Not a valid WeirdDateTime");
int[] parts = match.Groups.Cast<Group>()
.Skip(1)
.Select(x => int.Parse(x.Value))
.ToArray();
int year = parts[0];
int month = parts[1];
int day = parts[2];
int hour = parts[3];
int minute = parts[4];
int second = parts[5];
return new WeirdDateTime(year, month, day, hour, minute, second, DateTimeKind.Unspecified);
}
public override string ToString()
{
throw new NotImplementedException("Write this!");
}
}
class Program
{
public static void Main()
{
WeirdDateTime weirdDateTime = WeirdDateTime.Parse("2010-01-19 27:00:00");
DateTime dateTimeUtc = weirdDateTime.DateTime.ToUniversalTime();
Console.WriteLine(dateTimeUtc);
}
}
- 1. ¿Cómo formatear DateTime a 24 horas?
- 2. C# DateTime cae dentro de las últimas 24 horas
- 3. DateTime Formato como HH: mm 24 Horas sin AM/PM
- 4. Cómo representar un formato .NET DateTime de 24 horas en 01-24 en lugar de 00-23?
- 5. Objetos de tiempo de Python con más de 24 horas
- 6. Convertir 12 horas a 24 horas
- 7. PHP MySQL Query más popular en las últimas 24 horas
- 8. mysql agregando horas a datetime
- 9. Conversión de 12 horas a 24 horas en java
- 10. Convertir formato de 12 horas a 24 horas en Ruby
- 11. Estricto tiempo de 24 horas en JFormattedTextField
- 12. Conversión de tiempo de 24 horas a 12 horas
- 13. Django query datetime para objetos de más de 5 horas
- 14. Detectar configuración de 24 horas de iPhone
- 15. DateTime.ParseExact() no asimila los valores de tiempo de 24 horas?
- 16. veces análisis sintáctico por encima de 24 horas en C#
- 17. ejecutando una tarea php cada 24 horas
- 18. ¿Cómo puedo asignar TimeSpan con más de 24 horas al código del servidor SQL primero?
- 19. C# loops a través de 24 horas cada 30 minutos
- 20. ¿Cómo configurar el TimePickerDialog a 24 horas?
- 21. DateTime.Parse DD/Reloj MM/AAAA 24 horas
- 22. Representación del tiempo en Excel por encima de 24 horas
- 23. Restar n horas de DateTime en Ruby
- 24. NSDateFormatter dateFromString y iPhone en formato de 24 horas Confusión
- 25. Convertir el formato de hora a 24 horas en Javascript
- 26. 24 horas Restar en T-SQL a partir de hoy
- 27. Si 'timesince' es más de 24 horas, solo muestre el recuento de días y no el recuento de horas
- 28. DateTime día que termina 24:00 (medianoche)
- 29. ¿Horas en NSDate todo el tiempo en estilo de 24 horas?
- 30. Detecta si el formato de hora está en formato de 12 horas o 24 horas
Estoy intrigado. ¿Qué industria es esta? –
Fabricante de TARDIS. – JohnFx
@JohnFx - es el 1 de abril después de todo –