2010-12-10 20 views
6

मैं यह कैसे रिटर्न पर उलझन में हूँ:यह रूबी फ़ंक्शन क्या कर रहा है?

def utc2user(t) 
    ENV["TZ"] = current_user.time_zone_name 
    res = t.getlocal 
    ENV["TZ"] = "UTC" 
    res 
end 

यह पहली ENV चर सेट है, तो, स्थानीय मूल्य सेट 'रेस' तो फिर से assignes ENV चर, तो रिटर्न रेस?

मुझे यकीन नहीं है कि मैं समझता हूं कि यह यूटीसी से उपयोगकर्ता समय क्षेत्र में कैसे परिवर्तित हो रहा है?

+0

कुछ जानकारी: http://wiki.rubyonrails.org/howtos/time-zones – Zabba

उत्तर

7

पहली पंक्ति उस उपयोगकर्ता के लिए सही समय में res मान प्राप्त करने के लिए उपयोगकर्ता के समय क्षेत्र में पर्यावरणीय समय क्षेत्र चर सेट कर रही है। अगर यह उपयोगकर्ता के लिए सेट नहीं किया गया है, तो समय अभी भी यूटीसी में होगा।

यह तब पर्यावरण परिवर्तक को यूटीसी समय पर सेट करता है, जो मुझे लगता है कि एप्लिकेशन का डिफ़ॉल्ट है।

फिर यह res देता है।

2

यह current_user.time_zone_name द्वारा ऑब्जेक्ट पर getlocal पर आक्रमण करके समय क्षेत्र नाम के अनुसार समय लौटाता है।

यह तो यूटीसी के लिए वर्तमान समय क्षेत्र रीसेट करता है और देता है Time उद्देश्य यह है कि मंगलाचरण के समय getlocalसे लौटे (अर्थात जब पर्यावरण के समय क्षेत्र के लिए जो भी उपयोगकर्ता के समय क्षेत्र है) था।

2

यह फ़ंक्शन इनपुट के रूप में समय लेता है, यह उपयोगकर्ताओं को टाइमज़ोन को टीजेड में पास करता है ताकि जब गेटलोकल विधि कहा जाता है तो यह वास्तव में उपयोगकर्ता स्थानीय टाइमज़ोन पर आधारित होता है और यूटीसी पर नहीं होता है। इसके बाद यह वापस टीजेड एनवीटी वैरिएबल को वापस यूटीसी में वापस कर देता है और वास्तव में उपयोगकर्ताओं को अंतिम समय क्षेत्र में स्थानीय समय क्षेत्र लौटाता है।

4

getlocal विधि ENV [ "टीजेड"] का उपयोग करता है, तो यह अस्थायी रूप से, यह सेट इसका इस्तेमाल, और फिर इसे वापस डाल करने के लिए बस थोड़ी नृत्य है।

हालांकि इस मामले में इसे "यूटीसी" में "वापस" रखा जा रहा है, यह पहले नहीं था, जो थोड़ा संदिग्ध लगता है। और वैसे भी ऐसा करने के लिए in_time_zone विधि है, वैसे भी!

+0

कोड रेल व्यंजनों की किताब से नमूना है। – Zabba

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