Lavoro in un settore bizzarro e irrazionale dove dobbiamo essere in grado di rappresentare l'ora del giorno come 06:00:00 alle 30:00:00 invece di 0:00:00 alle 24:00:00. C'è un modo per farlo usando il tipo DateTime? Se provo a costruire una data con un valore orario maggiore di 24, genera un'eccezione.Conservare più di 24 ore in un DateTime
risposta
Come si usa invece un TimeSpan?
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);
quindi utilizzare la proprietà TotalHours
del TimeSpan obj
Ho provato a utilizzare TimeSpan, tuttavia tutte le ore oltre 24 verranno trasferite nel giorno. Quindi, ad esempio, 36:00:00 diventerebbe 1: 12: 00: 00 come TimeSpan. – Rob
Come si presenta questo problema? Usa semplicemente yourTimeSpan.TotalHours. –
@Rob utilizzare quindi la proprietà TotalHours dell'oggetto TimeSpan. – Gabe
dubito che si possa fare esattamente quello che stai cercando, ma mi aspetto che si potrebbe fare la propria classe DateTime che aggiunge semplicemente +6 ore al valore. Memorizza internamente 00 - 24, ma i metodi get/set lo fanno sembrare 06 - 30.
Sì, è possibile ereditare dalla classe data ora esistente e sovrascrivere i metodi/proprietà che coinvolgono l'ora –
@Chris Simpson, non è possibile ereditare dalla struttura DateTime esistente. –
È necessario utilizzare TimeSpan per qualcosa di simile. – Gabe
Basta avere il tuo negozio di logica di business/return DateTime.Hours.Add (6). Dovrai essere consapevole di ciò nella tua logica di visualizzazione.
come utilizzare un normale DateTime per memorizzare l'ora effettiva e scrivere una nuova classe che memorizza (o deriva da) un DateTime e ha un ToString() che regola l'output.
- Si dovrebbe utilizzare TimeSpan, non DateTime.
Le opzioni di formato Per il periodo è
un: [giorni] [ore]:. [Minuti]: [secondi] [frazioni di secondo]
B:. [Giorni] [ore].: [minuti]: [secondi]
. C: [giorni] [ore]: [minuti]
d: [giorni] [ore]
e:. [giorni]
f: [ore]: [minuti]: [secondi] [secondi frazionari]
g. [Ore]: [minuti]: [secondi]
h: [ore]: [minuti]
Grazie, sono completamente d'accordo :) – Gabe
Penso che questo dovrebbe essere solo un problema di presentazione.
Consentire agli utenti di immettere dati in questo formato strano e convertirli immediatamente in UTC. Effettua tutti i calcoli nei tempi UTC. Quindi crea un metodo ToString per convertire i risultati nel tuo formato strano. Probabilmente avrai bisogno anche di altri metodi e proprietà di utilità come un'implementazione di WeirdDateTime.Day
.
È possibile scrivere una classe wrapper attorno a un DateTime e disporre di tutti i metodi di conversione e utilità necessari per tale classe. Ho provato a iniziarlo, implementando l'analisi da una stringa in un formato strano. Questo non è un codice di produzione pronto in alcun modo, ma forse può darti alcune idee su come potresti avvicinarti a questo:
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. Ora da DateTime? in formato 24 ore
- 2. Come formattare DateTime su 24 ore?
- 3. Come rappresentare un formato .NET DateTime di 24 ore in 01-24 anziché in 00-23?
- 4. PHP DateTime(): visualizza un intervallo di tempo maggiore di 24 ore ma non di giorni se maggiore di 24 ore
- 5. input type = "tempo" più di 24 ore
- 6. Come aggiungere 24 ore per oggetto datetime di javascript
- 7. Converti 12 ore in 24 ore
- 8. Tempo di 24 ore rigoroso in JFormattedTextField
- 9. Oggetti temporali Python con più di 24 ore
- 10. Come ottenere un datetime in formato 24 ore dal database Oracle?
- 11. php formato 12 ore in formato 24 ore conversione
- 12. DateTime.ParseExact() non Grok valori di tempo di 24 ore?
- 13. Conversione formato datetime di 12 ore
- 14. 24 ore dalla data di stringa
- 15. Come gestire i valori temporali su 24 ore in python?
- 16. Regex per 12 ore e il tempo 24 ore formato
- 17. Formato da 24 ore a formato 12 ore
- 18. SimpleDateFormat.getTimeInstance ignora il formato 24 ore
- 19. Convert 24 tempo ore a 12 ore più AM indicazione/PM Oracle SQL
- 20. come ottengo le righe mysql da 24-48 ore fa?
- 21. Trova record con un campo data nelle ultime 24 ore
- 22. DateTime.Parse GG/MM/AAAA 24 ORE
- 23. Rileva impostazione ora 24 ore su iPhone
- 24. Come impostare TimePickerDialog su 24 ore?
- 25. selezionare i record con la data nelle ultime 24 ore
- 26. Conversione del formato in formato 24 ore in Javascript
- 27. Come convertire TimeSpan in 24 ore e in minuti String?
- 28. Ora in NSDateComponent in formato 12 o 24 ore?
- 29. NSDateFormatter dateFromString e iPhone in Confusione formato 24 ore
- 30. espressioni regolari di 24 ore per HTML 5
Sono incuriosito. Che industria è questa? –
produttore TARDIS. – JohnFx
@JohnFx - è il 1 aprile dopo tutto –