2009-10-31 18 views

Odpowiedz

66

Date jest prawie całkowicie przestarzała i nadal jest dostępna ze względu na zgodność z poprzednimi wersjami. Jeśli trzeba ustawić poszczególne dni czy arytmetyki dat, użyj Calendar:

Calendar calendar = Calendar.getInstance(); // gets a calendar using the default time zone and locale. 
calendar.add(Calendar.SECOND, 5); 
System.out.println(calendar.getTime()); 
+1

Czy prawie całkowicie przestarzałe oznacza, że ​​się zepsuje, jeśli klienci zaktualizują maszynę JVM? Holy crap ... to może być naprawdę złe. Dlaczego mieliby zabić Date ?! – Karl

+4

Bardzo, bardzo rzadko są to przestarzałe rzeczy naprawdę usunięte z JRE i zwykle są wykonywane tylko wtedy, gdy funkcjonalność jest aktywnie szkodliwa. Myślę, że nie ma niebezpieczeństwa, że ​​Date zostanie usunięta w następnych kilku głównych wydaniach. Jest przestarzałe, ponieważ ma poważne wady, ale pozostanie w pobliżu. –

+1

@Karl Nie mam nic do dodania do odpowiedzi Joachima. –

44

Można użyć:

now.setTime(now.getTime() + 5000); 

Date.getTime() i setTime() zawsze odnoszą się do milisekund od 1 stycznia 1970 r 12am UTC.

Joda-Time

Chciałbym jednak zdecydowanie radzimy używać Joda Time jeśli robisz coś więcej niż bardzo najprostszych manipulacji data/czas. Jest to bardziej wydajna i przyjazna biblioteka niż wbudowana obsługa w Javie.

DateTime later = DateTime.now().plusSeconds(5); 

java.time

Joda-Time później zainspirował nową java.time package wbudowany w Javie 8.

+4

Jak naciśnij F5, Twój post zapełnia się coraz bardziej przydatnych informacji, to magia =/ –

+0

Co na temat korzystania z kalendarza? –

+5

Cóż, nie mogłem pozwolić, aby pytanie java.util.Date poszło nie wspominając o Jodzie :) –

2

Właśnie znalazłem to z java docs

import java.util.Calendar; 

public class Main { 

    public static void main(String[] args) { 
    Calendar now = Calendar.getInstance(); 
    System.out.println("Current time : " + now.get(Calendar.HOUR_OF_DAY) + ":" 
     + now.get(Calendar.MINUTE) + ":" + now.get(Calendar.SECOND)); 

    now.add(Calendar.SECOND, 100); 
    System.out.println("New time after adding 100 seconds : " + now.get(Calendar.HOUR_OF_DAY) + ":" 
     + now.get(Calendar.MINUTE) + ":" + now.get(Calendar.SECOND)); 
    } 
} 

Czy istnieje konwencja powinienem być świadomym?

+0

Wow. Java może być naprawdę gadatliwa, gdy jest poprawnie napisana. Twoja nazwa zmiennej miała tylko trzy litery! – Karl

18

Z jednego-liner-hacky dep .:

new Date(System.currentTimeMillis() + 5000L)

Jak rozumiem z Twojej przykład "teraz" jest naprawdę "teraz", a "System.currentTimeMillis()" ma reprezentować tę samą koncepcję "teraz" :-)

Ale, tak, wszystko, co jest bardziej skomplikowane, niż to, co dzieje się w interfejsie API czasu Joda.

+0

+1, prawdopodobnie odpowiedziałbym na to samo. – Karl

+1

+1, za użycie KISS principal (Keep It Simple, Stupid). –

6

Jak inni zwrócili uwagę, w Joda jest dużo łatwiej:

DateTime dt = new DateTime(); 
DateTime added = dt.plusSeconds(5); 

gorąco polecam migracji do Joda. Prawie każde pytanie związane z datowaniem w języku Java na SO rozwiązuje zalecenie Joda :-) Interfejs API Joda ma być podstawą nowego standardowego interfejsu API daty Java (JSR310), więc będziesz migrować w kierunku nowego standardu.

+5

"java.util.Date" to "użyj czasu Jody" jako "Losowe daje mi powtarzające się wartości" to "nie twórz nowych instancji losowych" :) –

0
public class datetime { 

    public String CurrentDate() {   
     java.util.Date dt = new java.util.Date(); 
     java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     String currentTime = sdf.format(dt); 
     return currentTime; 
    } 

    public static void main(String[] args) { 
     class SayHello extends TimerTask { 
      datetime thisObj = new datetime(); 
      public void run() { 
       String todaysdate = thisObj.CurrentDate(); 
       System.out.println(todaysdate); 
      } 
     } 
     Timer timer = new Timer(); 
     timer.schedule(new SayHello(), 0, 5000); 
    } 
} 
3

The Answer Pascal Thivent i the Answer Jon Skeet są zarówno prawidłowe i dobre . Oto trochę dodatkowych informacji.

pięć sekund = PT5S (ISO 8601)

Innym sposobem wyrażania idei „pięć sekund później” jest ciągiem przy użyciu standardowych formatów zdefiniowanych przez ISO 8601. Model duration/period format ma ten wzór PnYnMnDTnHnMnS, gdzie P oznacza początek, a T oddziela część daty od części czasu.

Tak więc pięć sekund to PT5S.

Joda-Time

Joda-Time 2,8 biblioteka może zarówno generować i analizować takie ciągi czas/okres. Zobacz klasy Period, Duration i Interval. Możesz dodawać i odejmować obiekty Period do/z obiektów DateTime.

Wyszukiwanie StackOverflow dla wielu przykładów i dyskusji. Oto jeden szybki przykład.

DateTimeZone zone = DateTimeZone.forID("America/Montreal"); 
DateTime now = DateTime.now(zone); 
DateTime then = now.plusSeconds(5); 
Interval interval = new Interval(now, then); 
Period period = interval.toPeriod(); 

DateTime thenAgain = now.plus(period); 

Zrzut na konsolę.

System.out.println("zone: " + zone); 
System.out.println("From now: " + now + " to then: " + then); 
System.out.println("interval: " + interval); 
System.out.println("period: " + period); 
System.out.println("thenAgain: " + thenAgain); 

Po uruchomieniu.

zone: America/Montreal 
From now: 2015-06-15T19:38:21.242-04:00 to then: 2015-06-15T19:38:26.242-04:00 
interval: 2015-06-15T19:38:21.242-04:00/2015-06-15T19:38:26.242-04:00 
period: PT5S 
thenAgain: 2015-06-15T19:38:26.242-04:00 
1
 String serverTimeSync = serverTimeFile.toString(); 
     SimpleDateFormat serverTime = new SimpleDateFormat("yyyy,MM,dd,HH,mm,ss"); 
     Calendar c = Calendar.getInstance(); 
     c.setTime(serverTime.parse(serverTimeSync)); 
     c.add(Calendar.MILLISECOND, 15000); 
     serverTimeSync = serverTime.format(c.getTime()); 
+0

Czy możesz wyjaśnić swój kod i omówić wartość dodaje więcej niż kilka istniejących odpowiedzi? Przeciążanie stosu ma na celu coś więcej niż bibliotekę kodu. –

+0

Mam timeprofile.txt w device.iwas przeczytać thrw andriod bufferreader.and następnie dodając 15 sekund zapominając o czasie serwera –

Powiązane problemy