2015-08-20 7 views
5

पर ज्ञात टाइमज़ोन के साथ दिनांक कनवर्ट करें दिनांक और समय रूपांतरण हमेशा मेरा कमजोर लिंक रहा है। मैं स्ट्रिंग प्रारूप में निम्न मान है:यूटीसी तिथि

  1. स्ट्रिंग तारीख = "2015/08/21 03:15" और समय क्षेत्र इस तिथि के लिए
  2. स्ट्रिंग समयक्षेत्र = "GMT + 05: 30" है;

अब मुझे इस तारीख को गुप्त करने की आवश्यकता है, जिसके लिए मुझे पहले से ही समय क्षेत्र पता है, यूटीसी तिथि पर।

+0

क्या आप जावा 8 दिनांक/समय API का उपयोग कर सकते हैं? –

+0

@MickMnemonic मैं Java8 का उपयोग कर रहा हूं केवल –

उत्तर

1

आप में समय दिया जाता है तो "जीएमटी + 05: 30" टाइमज़ोन अगला कोड इसे यूटीसी टाइमज़ोन में परिवर्तित कर देगा:

String strDate = "2015-08-21 03:15"; 
String timeZone="GMT+05:30"; 
String format = "yyyy-MM-dd HH:mmz"; 
SimpleDateFormat formatter = new SimpleDateFormat(format); 
Date dateStr = formatter.parse(strDate+timeZone); 
formatter.setTimeZone(TimeZone.getTimeZone("UTC")); 
String formattedDate = formatter.format(dateStr); 
System.out.println("UTC datetime is: "+formattedDate); 
+0

आपका कोड 2015-08-20 22:15 जेड के रूप में आउटपुट देता है इस वेबसाइट के अनुसार यह 21- अगस्त 9:45 बजे होना चाहिए http://www.worldtimeserver.com/convert_time_in_UTC.aspx?y=2015&mo=8&d= 20 और एच = 21 और एमएन = 45 –

+0

@ हितेशभूतिनी मैंने कोड को थोड़ा अद्यतन किया है।सही उत्तर 20-अगस्त 21:45 यूटीसी है। और हां, यह 20 अगस्त का होना चाहिए, 21 नहीं, क्योंकि यूटीसी जीएमटी + 5: 30 –

+0

पर 'पीछे' है। और हाँ सही जवाब 20 अगस्त है। मुझे एहसास हुआ कि मैंने टिप्पणी पोस्ट करने के बाद गलत था लेकिन अपडेट करना भूल गया। बचाव के लिए धन्यवाद। मैं जवाब स्वीकार किए जाने के रूप में चिह्नित करूंगा। –

0

आप देख सकते हैं:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss"); 
Date date = null; 
try { 
    //Here you say to java the initial timezone. This is the secret 
    sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
    date = sdf.parse(review); 
} catch (ParseException e) { 
    e.printStackTrace(); 
    } 

//Here you set to your timezone 
sdf.setTimeZone(TimeZone.getDefault()); 
System.out.println(sdf.format(date)); 
+0

'समीक्षा' क्या है? जहां तक ​​मैं देख सकता हूं, यह एक यूटीसी तिथि को स्थानीय तिथि में बदलने की कोशिश कर रहा है (जो ओपी नहीं मांग रहा था)। – Hulk

1

आप इस तरह की कोशिश कर सकते हैं:

दृष्टिकोण 1: का उपयोग जावा दिनांक:

//Your input date string 
String date="2015-08-21 03:15"; 

// date format your string 
String format = "yyyy-MM-dd HH:mm"; 

//Create SimpleDateFormat instance 
SimpleDateFormat sdf = new SimpleDateFormat(format); 

// Convert Local Time to UTC 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 

//parse your input date string to UTC date 
Date gmtTime = new Date(sdf.parse(date)); 

दृष्टिकोण 2: Joda का उपयोग करना समय (अनुशंसित)

String dateString = "2015-08-21 03:15:00+5:30"; 

String pattern = "yyyy-MM-dd HH:mm:ssZ"; 

DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern); 

DateTime dateTime = dtf.parseDateTime(dateString); 

System.out.println(dateTime); 
+1

आपके कोड में मुझे नहीं लगता कि आपने टाइमज़ोन जीएमटी + 05: 30 का उपयोग किया है। जो आपने लिखा है वह सर्वर के डिफ़ॉल्ट टाइमज़ोन को पिकअप करेगा और इसे यूटीसी समय में परिवर्तित करेगा। आइए कहें कि आपका कोड सर्वर पर चलता है जो एमएसटी टाइमज़ोन में है। यह दिनांक 2015-08-21 03:15 को एमएसटी तिथि के रूप में मानेंगे और इसे यूटीसी तिथि में परिवर्तित करेगा। जो मैं नहीं चाहता हूं। मुझे पहले से ही पता है कि यह तारीख जीएमटी + 05: 30 टाइमज़ोन यानी आईएसटी में है और इसे यूटीसी समय में बदलने की जरूरत है। –

+0

@ हितेशभूतिनी .. मैंने जवाब अपडेट किया है, आपको +5: 30 मामले को संभालने के लिए जोडा समय चाहिए। – Garry

0

जावा में एक Date 1970 के बाद से यह संख्या अकेले कोई विशेष समय क्षेत्र है मिलीसेकेंड की संख्या का प्रतिनिधित्व करता है। इसका अर्थ यह है कि यदि आप new Date() के साथ दिनांक बनाते हैं तो आपको 1 9 70 से वर्तमान मिलीसेकंड मिलते हैं और यदि आप उस पर स्ट्रिंग को कॉल करते हैं तो यह मान आपके वर्तमान लोकेल टाइमज़ोन में प्रदर्शित होता है। वास्तविक संख्या यह संख्या दर्शाती है कि समय क्षेत्र विशिष्ट है। यही कारण है कि आप TimeZoneCalendar और प्रारूप कक्षाओं पर सेट कर सकते हैं।

public static Calendar getUtcCalendar() { 
    GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC")); 
} 

तो यूटीसी समय क्षेत्र में एक विशेष समय के लिए एक Date कन्वर्ट करने के लिए:

एक विशिष्ट समय क्षेत्र के साथ एक कैलेंडर आप यह कर सकते हैं का दृष्टांत के लिए

Calendar calendar = getUtcCalendar(); 
calendar.setTime(date); 
return calendar; 
0

चूंकि आप केवल जावा -8-समाधान चाहते हैं:

String input = "2015-08-21 03:15"; 
String offsetInfo = "GMT+05:30"; 

LocalDateTime ldt = 
    LocalDateTime.parse(input, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm")); 
ZoneOffset offset = 
    ZoneOffset.of(offsetInfo.substring(3)); // GMT-prefix needs to be filtered out 

LocalDateTime result = 
    ldt.atOffset(offset).withOffsetSameInstant(ZoneOffset.UTC).toLocalDateTime(); 
System.out.print(result); // output: 2015-08-20T21:45 
संबंधित मुद्दे