2015-11-16 7 views
5

में दिनांकों को कनवर्ट करें यह often recommended है कि डेटाटाइम यूटीसी में डेटाबेस में संग्रहीत किया जाता है और उपयोगकर्ताओं को उनके स्थानीय टाइमज़ोन में प्रदर्शित/प्राप्त किया जाता है।स्प्रिंग एमवीसी - उपयोगकर्ता के टाइमज़ोन से यूटीसी

मैं इस पैटर्न को स्प्रिंग एमवीसी/स्प्रिंग बूट एप्लिकेशन में लागू करने की कोशिश कर रहा हूं लेकिन दस्तावेज़ीकरण या उदाहरण ढूंढने में सक्षम नहीं हूं। मैं java.util पर @DateTimeFormat एनोटेशन का उपयोग कर रहा हूं। स्प्रिंग पार्स/प्रारूप तिथियों को बनाने के लिए मेरे @ModelAttribute फॉर्म ऑब्जेक्ट्स के डेट गुण।

क्या वसंत इस पैटर्न के लिए समर्थन में बनाया गया है? Django's timezone-aware datetimes की लाइनों के साथ कुछ अच्छा होगा। यदि नहीं है तो इसे लागू करने का एक बहुत ही बोझिल तरीका नहीं है? या क्या स्प्रिंग एमवीसी अनुप्रयोग में डेटाटाइम को संभालने/स्टोर करने का एक बेहतर तरीका है?

फिलहाल एप्लिकेशन केवल यूके ही है, इसलिए वर्तमान में मुझे केवल बीएसटी (डेलाइट बचत) के लिए समर्थन की आवश्यकता है, अलग-अलग उपयोगकर्ताओं के लिए अलग-अलग समय क्षेत्र नहीं। हालांकि अलग-अलग समय क्षेत्रों में उपयोगकर्ताओं का समर्थन करना संभावित भविष्य की आवश्यकता है।

+0

आप एक तिथि ओ कैलेंडर वस्तु में अपनी तिथि भंडारण कर रहे हैं: टी, आप LocalDateTime प्रकार का उपयोग कर सकते हैं? – reos

+0

क्या आपने कभी यह पता लगाया है? मुझे इसमें बहुत दिलचस्पी है। – Andy

+0

@reos, हम इसे java.util के रूप में संग्रहीत कर रहे हैं। इस समय – frankoid

उत्तर

0

आशा है कि यह आपकी मदद करेगा या कम से कम उस बिंदु से होगा जहां आप शुरू कर सकते हैं।

ऑफसेटडेट टाइम का उपयोग करने का सबसे अच्छा तरीका है जैसे तारीखों को संग्रहीत करने के लिए टाइप करें।

OffestDateTime eventDate = modelObject.getEventDate(); 
OffsetDateTime userTime = eventDate.atZoneSameInstant(ZoneId.of(userTimeZone)); 

में नई तारीख वस्तु का दृष्टांत के लिए: फिर

OffsetDateTime createdOn = requestDto.getCreatedOn(); 
OffsetDateTime utc = createdOn.atZoneSameInstant(ZoneId.of("UTC")); 

और वापस (बेशक आप भी उन समय क्षेत्र स्टोर करने के लिए की जरूरत है): यह कन्वर्ट करने के लिए dateTime उपयोगकर्ता से यूटीसी के लिए आ रहा मूल्यों के लिए आसान है offse दिखाने के लिए

OffestDateTime now = OffestDateTime.now(Clock.systemUTC()); 
ModelObject dto = new ModelObject(); 
dto.setEventDate(now); 

और अंत में आप हैं की कोई जरूरत नहीं: यूटीसी आप घड़ी का उपयोग कर सकते -object

OffestDateTime eventDate = databaseModelObject.getEventDate(); 
LocalDateTime userTime = eventDate.atZoneSameInstant(ZoneId.of(userTimeZone)).toLocalDateTime()); 
ResponseDto response = new ResponseDto(); 
response.setEventDate(userTime); 
संबंधित मुद्दे