2011-07-13 10 views
9

मेरे पास मेरे ऐप के लिए ट्रैक समय की एक गुच्छा है। वे सभी यूटीसी समय में हैं। मेरे ऐप के हिस्से के लिए मैं इनमें से किसी एक के साथ एक ईमेल भेजना चाहता हूं, लेकिन उस विशिष्ट समय क्षेत्र में संपादित किया गया।सी # डेटाटाइम: विभिन्न समय क्षेत्रों के लिए रूपांतरण

वहाँ केवल दो प्रमुख क्षेत्रों, पूर्वी तट और टेक्सास (डलास और हस्टन)

जब मैं इस ईमेल भेजने के पूर्वी समय क्षेत्र (प्राप्त करने के लिए मैं भी एक नया datetime कर सकते हैं कि मैं के साथ सौदा कर रहे हैं

उपयोगकर्ता टेक्सास क्षेत्र में है, तो मैं कैसे उस समय (1 घंटे से कम) के लिए पूर्वी से मेरा समय परिवर्तित कर सकते हैं: DateTime timestamp = DateTime.Now;)

मेरे प्रश्न है?

मैं कुछ इस तरह की कोशिश की:

  //Convert timestamp to local time 
      TimeSpan ts = TimeZone.CurrentTimeZone.GetUtcOffset(timestamp); 
      timestamp.Add(ts); 

      timestampString = timestamp.ToString(); 

लेकिन वह काम नहीं किया। मुझे यह भी पता है कि इस लाइन मान्य नहीं है:

timestamp.Hour = timestamp.Hour - 1; 
+1

आप DateTime.Now से बचना चाहिए मिलता है, और बजाय DateTime.UtcNow का उपयोग करें। डेटटाइम.अब आपको एक दिन का गलत समय क्षेत्र या गलत डेलाइट बचत के साथ आश्चर्यचकित कर सकता है। –

उत्तर

15

एक विकल्प के समय क्षेत्र में एक समय के लिए एक स्थानीय समय में कनवर्ट करने TimeZoneInfo कक्षा का उपयोग करें:

TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
DateTime targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est); 
0

आप जावास्क्रिप्ट का उपयोग कर सकते हैं:

var visitortime = new Date(); 
    vat time = visitortime.getTimezoneOffset()/60; 

उसके बाद आप किसी भी छिपा नियंत्रण जो है runat = "सर्वर" को यह मूल्य बचा सकता है।

4
var now = DateTime.Now; // Current date/time 
    var utcNow = now.ToUniversalTime(); // Converted utc time 
    var otherTimezone = TimeZoneInfo.FindSystemTimeZoneById("ANY OTHER VALID TIMEZONE"); // Get other timezone 
    var newTime = TimeZoneInfo.ConvertTimeFromUtc(utcNow, otherTimezone); // New Timezone 
3

यह चाल

DateTime localTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.Local); 
+0

http://msdn.microsoft.com/en-us/library/bb382770(v=vs.110).aspx – Geykel

0

क्यों न सिर्फ

करना चाहिए TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, "AUS Eastern Standard Time");

और जाँच सभी उपलब्ध समय क्षेत्र

foreach (TimeZoneInfo tz in TimeZoneInfo.GetSystemTimeZones()) 
{ 
    Console.WriteLine(tz.Id); 
} 
संबंधित मुद्दे