जावा तिथि को जावा तिथि को जेपीए के साथ कैसे स्टोर करें


104

क्या कोई शरीर मुझे बता सकता है कि मैं कैसे मैक डेट को मैसकॉल डेटाइम को स्टोर कर सकता हूं ...?

जब मैं ऐसा करने की कोशिश कर रहा हूँ ... केवल तारीख संग्रहीत है और समय 00:00:00 इस तरह से मेराकल तारीख दुकानों में रहता है ...

2009-09-22 00:00:00

मैं सिर्फ डेट ही नहीं बल्कि टाइम भी चाहता हूं ... जैसे

2009-09-22 08:08:11

मैं स्प्रिंग mydomain वर्गों के साथ JPA (हाइबरनेट) का उपयोग कर रहा हूँ java.util.Date का उपयोग करता हूं, लेकिन मैंने हस्तलिखित प्रश्नों का उपयोग करके तालिकाएँ बनाई हैं ...

यह मेरा बना बयान है

CREATE TABLE ContactUs (id BIGINT auto_increment, 
                        userName VARCHAR(30), 
                        email VARCHAR(50), 
                        subject VARCHAR(100), 
                        message VARCHAR(1024), 
                        messageType VARCHAR(15), 
                        contactUsTime datetime, 
                        primary key(id))
                        TYPE=InnoDB;

आपके कोड के टुकड़े, शायद?
बोझो


1
इन दिनों आपको अब बिल्कुल भी उपयोग नहीं करना चाहिए java.util.Date(2010 में शायद बेहतर विकल्प नहीं था)। आधुनिक कक्षाओं का उपयोग करने के लिए बेहतर है, जैसे java.time.Instantया java.time.LocalDateTime, आपके द्वारा संग्रहीत किए जाने की तारीख-समय की सटीक आवश्यकताओं के आधार पर।
ओले वीवी

इनमें से कुछ पुराने उत्तर Google रैंकिंग पर बहुत अधिक हैं। जावा 8+ में हम केवल लोकटाइमटाइम का उपयोग करके डेटाटाइम को सेव करने के बजाय @ टाइममोरल का उपयोग करने के बजाय डेटाटाइम फॉर्मेट में सेव करने के लिए कर सकते हैं
होपकिंग

readyStatement.setTimestamp (1, नया टाइमस्टैम्प (System.currentTimeMillis ()));
रजत

जवाबों:


165

लिंक में देखें:

http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion

निम्नलिखित कोड ने समस्या को हल किया:

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);

यह ' करंट टाइम ' उस कॉलम में डाला गया था जिसका प्रकार डेटाइम था और यह सफल था।


4
लेकिन, वर्तमान समय एक स्ट्रिंग ऑब्जेक्ट है, और db में हम डेटाटाइम के रूप में डेटाटाइम लेते हैं, मुझे लगता है कि यह डाला नहीं जा रहा है। ठीक है?
रेड्डी

yyyy-MM-dd HH:mm:ssबहूत ज़रूरी है। पूंजीकरण पर ध्यान दें।
बिन्नम

91

अपने क्षेत्र (या गेट्टर) को @Temporal(TemporalType.TIMESTAMP)इस तरह से एनोटेट करें :

public class MyEntity {
    ...
    @Temporal(TemporalType.TIMESTAMP)
    private java.util.Date myDate;
    ...
}

यह ट्रिक काम आना चाहिए।


2
यह वास्तव में जवाब है!
पेरनेल

2
इसके लिए, यह उचित उत्तर है।
रयान

3
इस बात का ध्यान रखें कि यदि आप इस समाधान को चुनते हैं, तो db से प्राप्त होने पर आपकी तिथि एक टाइमस्टैम्प के रूप में दिखाई देगी। यह अच्छा प्रारूपण 'yyyy-MM-dd ....') नहीं होगा
jon

37

क्या आप शायद उपयोग कर रहे हैं java.sql.Date? जबकि एक जावा वर्ग (यह java.util.Dateखराब डिजाइन निर्णय का एक उपवर्ग है ) के रूप में मिलीसेकंड ग्रैन्युलैरिटी है , यह JDBC ड्राइवर द्वारा एक समय घटक के बिना तारीख के रूप में व्याख्या की जाएगी। आपको java.sql.Timestampइसके बजाय उपयोग करना होगा।


1
मैं का प्रयोग करेंगे नहीं java.sql.Dateया java.sql.Timestampडोमेन की कक्षाओं में, लेकिन मैं इस ओपी के संपादित करने से पहले लिखा गया था लगता है।
पास्कल थिवेंट

मैं। java.util.Date ऑब्जेक्ट पूरी तरह से अनुमानित परिणामों के साथ java.sql.Timestamp ऑब्जेक्ट्स की तुलना नहीं करते हैं।
बजे डग मोस्क्रॉप

8

शायद इसलिए कि आपकी जावा तिथि का अलग प्रारूप है mysql format( YYYY-MM-DD HH:MM:SS)

यह करो

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
 Date date = new Date();
 System.out.println(dateFormat.format(date));

आपने संदर्भ में सही प्रारूप का उल्लेख किया और फिर कोड में गलत प्रारूप का उपयोग किया।
मेरिक हफ्सटटलर

6

आपको 2011-07-18 + समय प्रारूप मिलेगा

long timeNow = Calendar.getInstance().getTimeInMillis();
java.sql.Timestamp ts = new java.sql.Timestamp(timeNow);
...
preparedStatement.setTimestamp(TIME_COL_INDEX, ts);

5

mysql डेटाइम -> ग्रेगोरियन कैलेन्डर

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse("2012-12-13 14:54:30"); // mysql datetime format
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
System.out.println(calendar.getTime());

ग्रेगोरियन कैलेन्डर -> mysql डेटाइम

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = format.format(calendar.getTime());
System.out.println(string);

4
java.util.Date date = new Date();
Object param = new java.sql.Timestamp(date.getTime());    
preparedStatement.setObject(param);

1

MySQL में दिनांक डालने के लिए निम्न कोड का उपयोग करें। MySql की आवश्यकता को पूरा करने के लिए हमारी तारीख के प्रारूप को बदलने के बजाय, हम STR_TO_DATE(?, '%l:%i %p')मापदंडों को सेट करके हमारी तिथि को पहचानने में डेटा बेस की मदद कर सकते हैं ।

उदाहरण के लिए, 2014-03-12 के रूप में प्रतिनिधित्व किया जा सकता है STR_TO_DATE('2014-03-12', '%Y-%m-%d')

preparedStatement = connect.prepareStatement("INSERT INTO test.msft VALUES (default, STR_TO_DATE( ?, '%m/%d/%Y'), STR_TO_DATE(?, '%l:%i %p'),?,?,?,?,?)"); 

1

इस जवाब में इसकी बहुत ही सरल स्थिति mysql में है, कॉलम डेटाटाइप डेटाइम है और आप जावा कोड से mysql में डेटा भेजना चाहते हैं:

java.util.Date dt = new java.util.Date ();
whatever your code object may be.setDateTime (डीटी);

महत्वपूर्ण बात यह है कि केवल तारीख चुनें और इसका प्रारूप पहले से ही mysql प्रारूप के अनुसार है और इसे भेजें, इसके लिए और संशोधनों की आवश्यकता नहीं है।


0

वास्तव में आप SimpleDateFormat का उपयोग नहीं कर सकते हैं, आप इस तरह से कुछ का उपयोग कर सकते हैं;

  @JsonSerialize(using=JsonDateSerializer.class)
  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy HH:mm:ss")
  private Date blkDate;

इस तरह आप सीधे निर्दिष्ट प्रारूप के साथ तारीख प्राप्त कर सकते हैं।


0

मैं अभी भी एक पंक्ति में विधि पसंद करता हूं

new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime())

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.