Pracuję w dziwacznej i nieracjonalnej branży, w której musimy być w stanie reprezentować porę dnia od 06:00:00 do 30:00:00 zamiast 0:00:00 do 24:00:00. Czy jest jakiś sposób to zrobić przy użyciu typu DateTime? Jeśli spróbuję skonstruować datę z wartością godziny większą niż 24, zgłasza wyjątek.Sklep przez ponad 24 godziny w DataTime
Odpowiedz
Zamiast korzystać z numeru 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);
Następnie użyj właściwość TimeSpan obj
wątpię można zrobić dokładnie to, czego szukasz TotalHours
, ale spodziewam się, że można tworzyć własne klasy DateTime, które po prostu dodaje +6 godzin do wartości. tj. przechowuje od 00 do 24 wewnętrznie, ale metody get/set sprawiają, że wydaje się, że jest to 06 - 30
Tak, możesz dziedziczyć po klasie daty i zastąpić metody/właściwości związane z godziną –
@Chris Simpson, nie możesz dziedziczyć z istniejącej struktury DateTime. –
Musisz użyć TimeSpan, aby uzyskać coś takiego. – Gabe
Wystarczy mieć swój logikę biznesową sklepu/return DateTime.Hours.Add (6). Musisz być tego świadomy w swojej logice wyświetlania.
w jaki sposób "przy użyciu zwykłego DateTime do przechowywania czasu rzeczywistego i pisania nowej klasy, która przechowuje (lub wywodzi się) z DateTime i ma ToString(), który dostosowuje wyjście.
- Powinieneś używać TimeSpan, a nie DateTime.
OPCJAMI formatu dla zakresie czasowym
A: [dni] [godziny]. [Minuty] [s] [ułamków sekund]
b. [Dni] [godziny].: [min]: [sekundy]
C. [dni] [godziny] [min]
d: [dni] [godziny]
e. [dni]
F: [godziny] [min]: [sekundy] [ułamków sekund]
g. [Godziny] [min] [sekundy]
H: [godziny] [min]
Dzięki, całkowicie się zgadzam :) – Gabe
Myślę, że to powinno być tylko kwestia prezentacji.
Umożliwia użytkownikom wprowadzanie danych w tym dziwnym formacie i natychmiast konwertuje je na UTC. Wykonaj wszystkie obliczenia w czasie UTC. Następnie utwórz metodę ToString, aby przekonwertować wyniki z powrotem na twój dziwny format. Prawdopodobnie będziesz potrzebować również innych metod i właściwości użytkowych, takich jak implementacja WeirdDateTime.Day
.
Można napisać klasę opakowującą wokół obiektu DateTime i mieć wszystkie potrzebne metody konwersji i narzędzia dla tej klasy. Miałem już go uruchomić - poprzez implementację parsowania z łańcucha w dziwnym formacie. To nie jest gotowy kod produkcyjny, ale być może może dać ci kilka pomysłów, jak możesz do tego podejść:
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. Jeśli "timesish" ma ponad 24 godzin, to po prostu wyświetlaj liczbę dni, a nie godziny.
- 2. Format TimeSpan większa niż 24 godziny
- 3. Wyrażenie regularne odpowiadające czasowi w formacie wojskowym (24 godziny)
- 4. Uzyskiwanie aktualnej godziny i daty w 24-godzinnej skali czasowej
- 5. Odejmij 24 godziny w T-SQL od dzisiejszej daty
- 6. Czas względny JavaScript 24 godziny temu itp. Jak w czasie
- 7. PHP DateTime(): Wyświetlaj czas dłuższy niż 24 godziny, ale nie jako dni, jeśli jest dłuższy niż 24 godziny.
- 8. Jak przekonwertować TimeSpan na 24 godziny i minuty String?
- 9. Format daty, jak HH: mm 24 godziny bez AM/PM
- 10. Jak dodać 24 godziny na datetime przedmiotu javascript
- 11. Jak usunąć certyfikat Sklep dodany przez makecert
- 12. LetsEncrypt - wyzwanie klienta ACMESharp w stanie oczekiwania przez ponad godzinę.
- 13. Potwierdzanie przez Php formatu 24-godzinnego
- 14. Jak radzić sobie z wartościami czasu przekraczającymi 24 godziny w pythonie?
- 15. Format DataTime w polu tekstowym w szynach
- 16. TSQL DataTime to DateKey Int
- 17. Konwertuj kolumnę Pandy na DataTime
- 18. Walidacja sprawdzania poprawności DataTime MVC
- 19. Parse CIM_DateTime do .Net DataTime
- 20. Regex dla formatu 12 godzinnej i czas 24 godziny na dobę
- 21. Jak mapować TimeSpan na więcej niż 24 godziny na kod serwera SQL?
- 22. Linq - Wybierz datę z DataTime
- 23. Sprawdzanie PHP czy znacznik czasu jest dłuższy niż 24 godziny od teraz
- 24. Aplikacja wyświetla nieprawidłowe godziny i minuty.
- 25. 24 godzin od daty ciąg
- 26. Sklep Daty czasu UTC w bazie danych
- 27. Sklep Android SQLite
- 28. Sklep certyfikatów Windows
- 29. Sklep z danymi MixedCollection
- 30. dane ponad kanału audio
Jestem zaintrygowany. Jaka jest branża? –
Producent TARDIS. – JohnFx
@JohnFx - jest 1 kwietnia po wszystkim –