2009-11-05 4 views
0

Я видел путь во многие места, где метод принимает длинный или int, чтобы представлять длительности в наносекундах, миллисекундах (наиболее часто встречающихся), секундах и даже днях. Это хорошее место для поиска ошибок.Наилучший тип продолжительности в Java или .Net

Проблема также довольно сложна, если вы осознаете, что вы можете означать, что на какое-то время должно быть определенное количество секунд или интервал, который лучше подходит человеческому восприятию времени, так что продолжительность 24 часа всегда будет быть на следующий день в то же время «настенные часы». Или что год составляет 365 или 366 дней в зависимости от даты, так что год с 28 февраля всегда будет 28 февраля.

Почему нет четкого типа для представления этого? Я не нашел ни одного в Java или .net

+0

Что бы вы назвали объектом, представляющим абсолютное число миллисекунд, и объект, представляющий «человеко-дружественное» восприятие времени? – Hugo

ответ

4

Для Java, взгляните на Joda (интуитивно понятная и согласованная библиотека времени и времени) и его классы . DateTime объекты могут обрабатывать добавление и манипуляцию с помощью этих объектов.

(ответ изменен, чтобы отразить комментарии ниже повторно. Период класса)

+0

Класс продолжительности Joda - это всего лишь обертка вокруг значения ms и не может представлять более длительные длительности, например «один день». – jarnbjo

+0

Правда - но Joda предоставляет классы 'Duration' и' Period' для представления подобных понятий. Последнее не является точным числом миллисекунд, но может быть «один день» или «один месяц», причем их фактическая продолжительность зависит от начала интервала, к которому они применяются. –

+0

... на самом деле это именно то, о чем просил ОП, если я правильно понимаю его требования - http://joda-time.sourceforge.net/key_period.html –

8

В .Net можно использовать TimeSpan structure представлять отрезок времени.

+0

Многие программисты не знают, что эта структура существует, потому что они не видят ее в родных типах данных C# или VB.NET - проголосовали за вас - поощряя больше людей делать то же самое, поэтому этот часто пропущенный тип данных хорошо известен , –

+1

Конечно, если вы вычтите или добавите даты в .NET, вы получите обратно TimeSpan. – Powerlord

+0

Да, но это не совсем соответствует тому, о чем спрашивал первоначальный вопрос. Например, нет метода 'TimeSpan.FromYears (int)'. Внутренне он измеряется как 64-разрядное целое число без знака, содержащее миллисекунды с некоторой эпохи. Нет абстрактного понятия месяца/года, которое имеет место во всех случаях, независимо от переменных месячных длин и високосных лет. Я не думаю, что такой тип существует в .NET BCL. –

1

Это непростая задача. Может быть, Joda-Time будет полезной библиотекой для вас. Он имеет класс Duration, который может делать то, о чем вы просите.

Смежные вопросы