Czas w Javie?

Czy istnieje Pakiet Java z tymi wszystkimi irytującymi stałymi czasowymi jak milisekund/sekund/minut w minutę / godzinę/dzień / rok? Nie chciałbym powielać czegoś takiego.

Author: Brian Agnew, 2010-03-14

12 answers

Joda-Time zawiera klasy takie jak Days , które zawierają metody takie jak toStandardSeconds () . Więc możesz napisać:

int seconds = Days.ONE.toStandardSeconds();

Chociaż wydaje się to trochę gadatliwe i być może jest przydatne tylko w bardziej złożonych scenariuszach, takich jak lata przestępne itp.

 22
Author: Brian Agnew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-08 16:53:49

Wybrałbym Javę TimeUnit Jeśli nie uwzględniasz już Joda-time w swoim projekcie. Nie musisz dołączać zewnętrznego lib i jest to dość proste.

Ilekroć potrzebujesz tych "irytujących stałych", zwykle potrzebujesz ich do mutliply pewnej liczby do konwersji między jednostkami. Zamiast tego możesz użyć TimeUnit, aby po prostu przekonwertować wartości bez wyraźnego mnożenia.

To:

long milis = hours * MINUTES_IN_HOUR * SECONDS_IN_MINUTE * MILLIS_IN_SECOND;

Staje się to:

long milis = TimeUnit.HOURS.toMillis(hours);

Jeśli ujawnisz metodę, która przyjmuje pewną wartość w, powiedzmy, Milis, a następnie trzeba ją przekonwertować, lepiej jest postępować zgodnie z tym, co robi Java concurrency API:

public void yourFancyMethod(long somePeriod, TimeUnit unit) {
    int iNeedSeconds = unit.toSeconds(somePeriod);
}

Jeśli naprawdę bardzo potrzebujesz stałych, nadal możesz uzyskać np. sekundy w godzinę, dzwoniąc:

int secondsInHour = TimeUnit.HOURS.toSeconds(1);
 97
Author: theadam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-01 08:32:08

Jeśli na Androidzie, proponuję:

Android.tekst.format.DateUtils

DateUtils.SECOND_IN_MILLIS
DateUtils.MINUTE_IN_MILLIS
DateUtils.HOUR_IN_MILLIS
DateUtils.DAY_IN_MILLIS
DateUtils.WEEK_IN_MILLIS
DateUtils.YEAR_IN_MILLIS
 29
Author: WhereDatApp.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-30 11:31:58

Java 8 / java.rozwiązanie czasu

Jako alternatywę dla TimeUnit, możesz z jakiegoś powodu preferować klasęCzas trwania z java.CZAS pakiet:

Duration.ofDays(1).getSeconds()     // returns 86400;
Duration.ofMinutes(1).getSeconds(); // 60
Duration.ofHours(1).toMinutes();    // also 60
//etc.

Dodatkowo, gdybyś poszedł głębiej i przeanalizował czas trwania.ofDays(..) metoda działa, zobaczysz następujący kod:

return create(Math.multiplyExact(days, SECONDS_PER_DAY), 0);

Gdzie SECONDS_PER_DAY jest pakietem chronionym stałą statyczną z klasy localTime .

/**
 * Seconds per day.
 */
static final int SECONDS_PER_DAY = SECONDS_PER_HOUR * HOURS_PER_DAY;

//there are also many others, like HOURS_PER_DAY, MINUTES_PER_HOUR, etc.

Myślę, że można bezpiecznie założyć, że gdyby były jakieś pakiet, który zdefiniowałby "wszystkie irytujące stałe czasowe, takie jak milisekundy/sekundy/minuty", jak je nazywasz, wierzę, że programiści Java SDK by ich używali.

Dlaczego ten pakiet LocalTime stałe jest chroniony, a nie publiczny to jest dobre pytanie, wierzę, że jest ku temu powód. Na razie wygląda na to, że naprawdę musisz je skopiować i utrzymać na własną rękę.

 22
Author: Mateusz Szulc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-01 10:49:10

Java TimeUnit wydaje się być tym, czego chcesz

 13
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-14 15:21:06

Joda Time ma też DateTimeConstants klasa z rzeczami takimi jak MILLIS_PER_SECOND, SECONDS_PER_MINUTE, MILLIS_PER_DAY, itd.

 9
Author: Lindsay Thurmond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-08 16:49:00

Podczas gdy TimeUnit omówione w ta odpowiedź i Duration omówione w ta odpowiedź prawdopodobnie bardziej bezpośrednio odnosi się do tego pytania, w Javie istnieją inne przydatne funkcje jednostek czasu.

Java.czas

Java.pakiet czasu posiada wyszukane enums dla DayOfWeek oraz Month. Tak więc zamiast przekazywać zwykłą liczbę lub ciąg znaków, możesz przekazać pełnowartościowe obiekty, takie jak DayOfWeek.TUESDAY lub Month.FEBRUARY.

Java.ramy czasowe obejmuje również zajęcia takie jak MonthDay, YearMonth, i Year. Ponownie, możesz przekazać pełnowartościowe obiekty, a nie zwykłe liczby lub ciągi znaków, aby uczynić kod bardziej samodokumentującym się, zapewnić prawidłowe wartości i zapewnić bezpieczeństwo typu.

ThreeTen-Extra projekt

The ThreeTen-Extra projekt udostępnia dodatkowe klasy do pracy z Javą.czas. Należą do nich: DayOfMonth, DayOfYear, AmPm, Quarter, YearQuarter, YearWeek, Days, Weeks, Months, Years, i Interval.

 2
Author: Basil Bourque,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:27

Jeszcze jedno podejście z już upieczonymi (dla wielu wywołań) Duration instancjami (i 0 operacjami matematycznymi):

ChronoUnit.DAYS.getDuration().getSeconds()
 1
Author: Vladislav Denisko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-23 10:19:04
              60 * 1000 miliseconds in 1 minute
                     60     seconds in 1 minute
                      1      minute in 1 minute
                   1/60       hours in 1 minute
              1/(60*24)        days in 1 minute
          1/(60*24*365)       years in 1 minute
1/(60*24*(365 * 4 + 1))     4 years in 1 minute
                                                * 60            is in 1 hour
                                                * 60 * 24       is in 1 day
                                                * 60 * 24 * 365 is in 1 year
                                            etc.

Tworzenie ich samemu, myślę, że jest najłatwiejsze. Możesz użyć klas Date i Calendar do wykonywania obliczeń z czasem i datami. Użyj typu danych long do pracy z dużymi liczbami, takimi jak milisekundy od 1 stycznia 1970 UTC, System.currentTimeMillis().

 0
Author: Pindatjuh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-14 14:49:28

Wątpię, bo nie wszystkie są stałymi. Liczba milisekund w ciągu roku jest różna, prawda?

 0
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-14 14:51:09

Jeśli chcesz uzyskać wartości Calendar miej wszystkie pola związane z zarządzaniem czasem, z pewnym prostym odbiciem możesz zrobić

Field [] fields = Calendar.klasy.getFields ();

for (Field f : fields)
{
  String fName = f.toString();
  System.out.println(fName.substring(fName.lastIndexOf('.')+1).replace("_", " ").toLowerCase());
}

Wyświetli się:

era
year
month
week of year
week of month
date
day of month
day of year
day of week
day of week in month
am pm
hour
hour of day
minute
second
millisecond
zone offset
dst offset
field count
sunday
monday
tuesday
wednesday
thursday
friday
saturday
january
february
march
april
may
june
july
august
september
october
november
december
undecimber
am
pm
all styles
short
long

Z którego możesz wykluczyć to, czego nie potrzebujesz.

Jeśli potrzebujesz tylko stałych, masz je: Calendar.DAY_OF_MONTH, Calendar.YEAR i tak dalej..

 0
Author: Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-14 14:54:43

Oto, czego używam do uzyskiwania milisekund.

import javax.management.timer.Timer;

Timer.ONE_HOUR
Timer.ONE_DAY
Timer.ONE_MINUTE
Timer.ONE_SECOND
Timer.ONE_WEEK
 0
Author: Reaz Murshed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-18 05:11:41