2014-05-15 3 views
5

मेरे पास केवल दिनांक स्ट्रिंग है, और मैं इसके द्वारा अन्य टाइमज़ोन में समय देखना चाहता हूं। तो मैं ऐसा क्या किया:दिनांक स्ट्रिंग द्वारा अन्य टाइमज़ोन का समय प्राप्त करें, परिणाम गलत है

String dateStr = "2014-05-15 16:14:58 PM"; 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
    sdf.setTimeZone(TimeZone.getTimeZone("America/Denver")); 
    Date date = sdf.parse(dateStr); 
    System.out.println(date); 

    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
    System.out.println(sdf1.format(date)); 

यह मेरे कंप्यूटर में वर्तमान समय क्षेत्र है:

enter image description here

परिणाम कोड चलाया गया था कि कि:

Fri May 16 06:14:58 CST 2014 

2014-05-16 06:14:58 AM 

परिणाम गलत है, मेरे कंप्यूटर में टाइमज़ोन को "अमेरिका/डेनवर" में बदलकर सही परिणाम मिला, और मैंने देखा कि:

America/Denver —— 2014-05-15 02:14:58 AM 

मुझे नहीं पता कि यह क्यों पसंद है?

लेकिन अगर मैं एक तिथि नहीं एक तारीख स्ट्रिंग था, मुझे क्या करना है कि:

public static String getFormatedDateString(String _timeZone) { 
    TimeZone timeZone = null; 
    if (StringUtils.isEmpty(_timeZone)) { 
     timeZone = TimeZone.getDefault(); 
    } else { 
     timeZone = TimeZone.getTimeZone(_timeZone); 
    } 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
    sdf.setTimeZone(timeZone); 
    // TimeZone.setDefault(timeZone); 
    return sdf.format(new Date()); 
} 

println ("अमेरिका/डेनवर -" + getFormatedDateString ("अमेरिका/डेनवर"));

परिणाम पसंद करती है कि:

------Asia/Shanghai------ 
2014-05-15 16:32:04 PM (current date) 
America/Denver —— 2014-05-15 02:32:04 AM 

यह परिणाम सही है।

तो मैं उलझन में था, मुझे समस्या नहीं मिल सका जब मेरे पास डेट स्ट्रिंग है और मैं अन्य टाइमज़ोन का समय जानना चाहता हूं। क्या कोई शरीर मेरी मदद कर सकता है?

उत्तर

5
  1. Date जावा में ऑब्जेक्ट टाइमज़ोन की अवधारणा से स्वतंत्र है।
  2. आप जो करना चाहते हैं वह दिनांक स्ट्रिंग के किसी अन्य समय क्षेत्र में समतुल्य समय प्राप्त करना है जो आपके स्वयं के समय क्षेत्र में 'माना' है।

हालांकि, 2 बिंदु अपने कोड में पीछे की ओर प्रकट होता है:

String dateStr = "2014-05-15 16:14:58 PM"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
sdf.setTimeZone(TimeZone.getTimeZone("America/Denver")); 
Date date = sdf.parse(dateStr); 

क्या इन 4 लाइनों करते हैं "अमेरिका/डेनवर" समय क्षेत्र में समय में एक बिंदु के रूप में दिनांक स्ट्रिंग पर विचार है।

जब आप इसे डेट ऑब्जेक्ट पर पार्स करते हैं, तो यह आपको अपने टाइमज़ोन में बराबर समय देगा।

इसलिए (आप बस, प्रभावी रूप से एक भी SimpleDateFormat उदाहरण उपयोग कर सकते हैं जो आपको बाद में पता लगा सकते हैं) अपने कोड के करीब रहने,

ड्रॉप पर setTimezone:

आप इसे दूसरी तरह के दौर चाहते हैं पहले एसडीएफ:

String dateStr = "2014-05-15 16:14:58 PM"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
//sdf.setTimeZone(TimeZone.getTimeZone("America/Denver")); 
Date date = sdf.parse(dateStr); 
System.out.println(date); 

अन्य sdf के लिए एक ही setTimezone जोड़ें:

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
sdf1.setTimeZone(TimeZone.getTimeZone("America/Denver")); 
System.out.println(sdf1.format(date)); 

अब, आप अपनी वर्तमान स्ट्रिंग को अपने वर्तमान (JVM) टाइमज़ोन में किसी दिनांक पर पार्स कर रहे हैं।फिर एक ही तारीख को एक अलग टाइमज़ोन स्ट्रिंग पर प्रारूपित करें।

Thu May 15 16:14:58 IST 2014 // Parsed the date string in IST 
2014-05-15 04:44:58 AM // Equivalent time in Denver 
+0

धन्यवाद, PopoFibo –

+0

@DigengTianhan आपका स्वागत है:

आउटपुट मैं बदल कोड (मेरी JVM के समय क्षेत्र IST जा रहा है) के साथ मिल – PopoFibo

संबंधित मुद्दे