Soru Bir Date nesnesini bir takvim nesnesine dönüştürme [duplicate]


Bu sorunun zaten bir cevabı var:

Bu yüzden, formdaki gelen bir nesneden bir tarih özniteliği alıyorum:

Tue May 24 05:05:16 EDT 2011

Bir takvim yöntemine dönüştürmek için basit bir yardımcı yöntem yazıyorum, aşağıdaki kodu kullanıyordum:

    public static Calendar DateToCalendar(Date date ) 
{ 
 Calendar cal = null;
 try {   
  DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
  date = (Date)formatter.parse(date.toString()); 
  cal=Calendar.getInstance();
  cal.setTime(date);
  }
  catch (ParseException e)
  {
      System.out.println("Exception :"+e);  
  }  
  return cal;
 }

Gelen nesneyi simüle etmek için sadece şu anda kullanılmakta olan kod içerisindeki değerleri atamaktayım:

private Date m_lastActivityDate = new Date();

Ancak bu yöntem ulaştıktan sonra bana boş bir işaretçi verir:

date = (Date)formatter.parse(date.toString()); 

148
2018-05-31 10:05


Menşei


Dup stackoverflow.com/questions/2727698/... - Vadzim


Cevaplar:


İşte yönteminiz:

public static Calendar toCalendar(Date date){ 
  Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  return cal;
}

Yaptığınız her şey hem yanlış hem de gereksiz.

BTW, Java Adlandırma kuralları, yöntem adlarının küçük harfle başladığını, dolayısıyla şöyle olmalıdır: dateToCalendar veya toCalendar (gosterildigi gibi).


Tamam, kodunuzu sütün, olur mu?

DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
date = (Date)formatter.parse(date.toString()); 

DateFormat Dizeleri Tarihlere dönüştürmek için kullanılır (parse()) veya Dizelere Tarihlerformat()). Tarihin bir Tarihin Dize temsili ayrıştırmak için bunu kullanıyorsunuz. Bu doğru olamaz değil mi?


364
2018-05-31 10:09



Çok teşekkürler dostum. Aslında bir web sitesinin kodunu aldım. Yukarıdaki yöntemin temizliği göz önüne alındığında şimdi intToCalendar yöntemimi hissetmeye başlıyorum biraz şişirilmiş 'public static Takvim intToCalendar (int i) {`Takvim cal = null; {String stringInt = String.valueOf (i) deneyin; DateFormat biçimlendirici = new SimpleDateFormat ("yyyyMMdd"); Tarih tarihi = (Tarih) formatter.parse (stringInt); cal = Calendar.getInstance (); cal.setTime (tarih); } yakalamak (ParseException e) {System.out.println ("Özel Durum:" + e); } dönüş değeri; } ' - Will
@Will a) int kullanmayın, uzun kullanın. Tarihler, int depolayabileceğinden daha büyük değerleri tutar. b) kullanımı yeni Tarih (uzun) - Sean Patrick Floyd
Orijinal sorudaki kodun sadece dönüştürmek için tasarlanmamış olduğu anlaşılıyor. Date için Calendaraynı zamanda tarihin aynı saatten kaldırılmasını da sağlar. İkincisi doğru olarak nasıl bulunur İşte. Kullanmak yerine (Date)formatter.parse(date.toString());, Deneyin formatter.parse(formatter.format(date)); - Chris
Orijinal kodun, biçimlendirilmiş tarihin yalnızca yıl-ay gününü ayrıştırmaya çalıştığını düşünüyorum, böylece takvim günün başlangıcında değil, günün başlangıcına ayarlanacaktı. Her ne kadar olsa da, yapmaya çalışmanın hoş bir yolu set(HOUR_OF_DAY, 0) vb iyidir. - Andy


Sadece Apache Commons'ı kullan

DateUtils.toCalendar (Tarih tarihi) 


11
2017-08-20 17:11





bu kadar kolay ... bir takvimi şu şekilde değiştir:

Calendar cal=Calendar.getInstance();
DateFormat format=new SimpleDateFormat("yyyy/mm/dd");
format.format(date);
cal=format.getCalendar();

-5
2018-03-13 06:34



İki yıl önce kabul edilen çözüm, bunu yapmanın daha temiz bir yoludur. Bu kodun, ilişkili takvim nesnesinin gizli varsayımına sahip olduğunu gözlemleyin. format şu anda biçimlendirdiğimiz tarihi tutuyor ve saat / dakika / saniye olmayan bir tarihle biçimlendirmenin bir yan etkisi olarak, bu iç tarihin saat / dakika / saniye olmaması da var. Belki de belgelenmiş davranış değil. Kabul ettiğimiz cevap ne yapar, doğrudan yapmaya çalıştığımız şeyi söyler. Eğer daha sonra saat / dakika / saniye kaldırmak istiyorsanız, bunun nasıl yapılacağı hakkında kabul edilen cevaba yorum yapın. - ToolmakerSteve


Bu işlev, bir java date nesnesinden sql date nesnesini döndürür.

 public java.sql.Date convertJavaDateToSQL(Date d)
{

    java.sql.Date d1= new java.sql.Date(d.getTime());
    return d1;
}

-7
2018-02-05 20:49



Sorunun hiçbir ilgisi yoktu java.sql.Date. - Basil Bourque