Soru Java.util.Date sınıfının parametreli kurucuları kullanımdan kaldırılmıştır. Alternatif nedir?


Bunu değiştirmek için ne kullanabilirim? new Date(2009, 12, 9)?

Yardım ettiğin için teşekkür ederim.


26
2017-12-09 14:33


Menşei


Ve iyi bir nedenden dolayı, 12 Aralık 2009’u istiyorsan, ihtiyacın var. new Date(109, 11, 9). - Yishai
@Yishai: Sebeplerin "iyi" olduğuna itiraz ediyorum. - Jon Skeet
@Yishai: Bu, yardımcı olmaktan ziyade keyfi bir sapkınlıktan daha fazlası gibi görünüyor. - Sukasa
Daha önce API belgelerinde (ve daha önce SO'da sayısız defa sorulan) bu şekilde yanıtlanan bu gibi basit soruların, zor ve ilginç sorular çok oy alamaması nedeniyle hızlıca kısaltılması beni şaşırtıyor. - BalusC
İlk önce java doktorlarına bakmak daha iyi bir fikir olurdu. Bunun gibi herhangi bir çekirdek sınıf, kullanımdan kaldırılan yöntem yerine kullanılabilecekleri bir açıklamaya sahip olacaktır. Eclipse, kullanımdan kaldırılmış yöntemi tıklatmaksa kullanacağınız kullanışlı bir hiledir, 'Shift' tuşunu basılı tutun ve 'F2'ye basın. Bu, tarayıcınızdaki java dokümanlarındaki yöntemi açacaktır. Öncelikle java docs url'yi kurmanız gerekebilir. - Gordon


Cevaplar:


İdeal olarak Joda zamanı yerine. Yerleşik biri için sonsuz üstün bir API var. Daha sonra aralarından seçim yapmak istersiniz LocalDateTime ve DateTime tam gereksinimlerinize bağlı olarak (karmaşık bir alan - bir cümle veya ikide özetlemeye çalışmıyorum, ama docs iyi bir iş yap).

Kesinlikle gerekliyse, java.util.Calendar ve bunu bir Date İhtiyacın olduğunda.


26
2017-12-09 14:35



Joda Time için +1, Tarih ve Takvim ile karşılaştırıldığında bir rüya. - Jim Ferrans
Bu harika olabilirdi, ancak gxt (google web toolkit ve ext js) kullanıyorum, bu yüzden bu API ile bir tarih nesnesi kullanmam gerektiğini düşünüyorum. - Tim
@Tim: Bu her zaman Standart olmayan ortamlardan söz etmeye değer ... - Jon Skeet


Takvim!

Calendar cal = Calendar.getInstance();
cal.set(2009, Calendar.DECEMBER, 12);

Aralık ayı için 12 koymadığımı fark ettim çünkü aslında 11 (Ocak 0).

Ardından, saniyeler, dakikalar, saatler, günler, aylar veya yılları aşağıdaki gibi kolayca ekleyebilir veya kaldırabilirsiniz:

cal.add(Calendar.HOUR, 2);
cal.add(Calendar.MONTH, -5);

Ve son olarak, bir Tarih istiyorsanız:

cal.getTime();

25
2017-12-09 14:55



"Add" örnekleriniz yanlış parametre sırasını kullanıyor, cal.add olmalı (Calendar.HOUR, 2) - Paul Gregoire
Bu çözümle, saat, dakika, saniye (ve kesirler) geçerli değerine ayarlandığını unutmayın. Bu gerçekten temiz değil. - tos


Bakarsanız Javadoc kullanarak doğru yönlendiriyor Takvim.

JDK sürüm 1.1'den itibaren, Calendar.set (yıl + 1900, ay) ile değiştirilir.   tarih, saat, dakika) veya GregorianCalendar (yıl + 1900, ay, tarih, saat,   dakika).

Bakarsanız Date kurucu params neden imtiyazlı olduğunu göreceksiniz:

Parametreler:

year - the year minus 1900.
month - the month between 0-11.
date - the day of the month between 1-31.
hrs - the hours between 0-23.
min - the minutes between 0-59.

year beklediğiniz değil ve ne de month.

Bahsettiğiniz tarihi göstermek için aramanız gerekiyor Date bunun gibi (tavsiye edilmez)

new Date(2009-1900, 12-1, 9)

Alternatif kullanarak Calendar olduğu

Calendar cal = Calendar.getInstance();
cal.set(2009, 11, 9); //year is as expected, month is zero based, date is as expected
Date dt = cal.getTime();

16
2017-12-09 14:35



Takvim ayı hala sıfır tabanlı. - BalusC
Aslında, ay beklediğim şey. Beni deli eden tarih. Java'daki her şey, tarih hariç sıfır temelli! - David
@ BlausC: Yani öyle. Bu fakir Takvim API'sı yerine, Joda tarih saatini kullanmayı tercih etmenin şaşkınlığı yoktur. - pjp


Ayrıca kullanabilirsiniz SimpleDateFormat nesne:

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;


public class DateTest {
    public static void main( String [] args ) throws ParseException {
        SimpleDateFormat sdf =  new SimpleDateFormat("yyyy, MM, dd");
        Date date = sdf.parse("2009, 12, 9");
        System.out.println( date );
    }
}

8
2017-12-09 14:43



Sadece yapmamaya dikkat edin. SimpleDateFormat bir static Örnek olarak güvenli değil. Görmek ibm.com/developerworks/java/library/j-jtp09263.html - pjp
: -On iplik güvenli olmadığını bilmiyordum. Neyse ki çoğu zaman kullanmıştım (sınıf üyesi olarak beyan edilmesine rağmen) iş parçacığı güvenli bir içerikte idi :) - OscarRyz


Tim, yorumlarınızda bunu GXT bağlamında yaptığınızı belirttiniz - yani GWT istemci kodunda. GWT, GregorianCalendar'u desteklemez ve büyük olasılıkla, JodaTime'ı GWTCompiler üzerinden koyamazsınız (mümkün olabilir, ancak gerçekten istiyor musunuz).

GWT'de takvim işlemleri yapmak istiyorsanız JNSI kullanma seçeneğiyle gerçekten ayrıldığınızı düşünüyorum. JavaScript’te Tarih sınıfına bakın.


4
2017-12-09 17:13





GregorianCalendar(year + 1900, month, date)

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html


2
2017-12-09 14:35



Değiştirmek new Date(...), üzerine bir şeyler yapman gerekecek .getTime(). - Carl Smotricz


Java'da maalesef tarih desteği tamamen kötüydü. Resmi olarak, muhtemelen bunu Takvim ile yapmanız gerekir, ancak bu benim görüşüme göre gerekli olmamalıdır. Diğerlerinin de belirttiği gibi, Joda zamanı çok daha iyi, ancak Ruby on Rails'de tarihler kadar kolay değil.

Oldukça fazla miktarda tarih desteği veren herhangi bir Java paketinin farkında değilim (Joda biraz düşüyor, ama yakın geliyor), ancak Groovy'de, TimeCategory'i kullanarak Ruby'de Rails benzeri bir tarih desteği sunuyor.


2
2017-12-09 14:51