रेल में सक्रिय रिकॉर्ड के लिए डिफ़ॉल्ट समयक्षेत्र कैसे बदलें?


140

मेरे मन application.rbमें निम्नलिखित टिप्पणी आई

# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
 config.time_zone = 'Eastern Time (US & Canada)'

जैसा कि आप ऊपर से देखते हैं, मैंने config.time_zoneईएसटी समय बना लिया है । हालांकि, अभी भी जब डीबी में रिकॉर्ड बनाए जाते हैं, तो ऐसा लगता है कि इसे datetimeयूटीसी प्रारूप में संग्रहीत किया जा रहा है।

उपरोक्त टिप्पणी में, वे कहते हैं

... और इस क्षेत्र में सक्रिय रिकॉर्ड ऑटो-कन्वर्ट करें ...

मैं ऐसा कैसे कर सकता हूं, और कहां?

इसके अलावा, मैं इसे हरोकू पर भी तैनात करूंगा और मैं चाहता हूं कि सेटिंग को आगे बढ़ाया जाए


MySQL में डेटाइम एक टाइमज़ोन-कम प्रकार है। यानी यह किसी भी समय आप चाहते हैं में हो सकता है। यदि आप इसे यूटीसी के रूप में मानते हैं तो यह ठीक है। लेकिन खबरदार अगर किसी को अपने डेटाबेस में सीधे देख रहे हैं और इसे अलग तरह से व्याख्या करते हैं।
वानुआन

जवाबों:


199

मैंने इस उत्तर को संकलित करने का निर्णय लिया है क्योंकि अन्य सभी अपूर्ण प्रतीत होते हैं।

config.active_record.default_timezone यह निर्धारित करता है कि डेटाबेस से दिनांक और समय खींचते समय Time.local (यदि सेट: स्थानीय) या Time.utc (यदि सेट: utc) का उपयोग किया जाए या नहीं। डिफ़ॉल्ट है: utc। http://guides.rubyonrails.org/configuring.html


यदि आप रेल टाइमजोन को बदलना चाहते हैं , लेकिन यूटीसी में डेटाबेस में एक्टिव रिकॉर्ड सेव करना जारी रखें , उपयोग करें

# application.rb
config.time_zone = 'Eastern Time (US & Canada)'

आप बदलना चाहते हैं रेल समय क्षेत्र और है सक्रिय रिकॉर्ड इस समय क्षेत्र, उपयोग में दुकान बार

# application.rb
config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = :local

चेतावनी : आपको गैर-यूटीसी प्रारूप में डेटाबेस में समय बचाने से पहले दो बार, यहां तक ​​कि तीन बार सोचना चाहिए।

नोट
संशोधित करने के बाद अपने रेल सर्वर को पुनरारंभ करना न भूलें application.rb


याद रखें कि config.active_record.default_timezoneकेवल दो मान ले सकते हैं

  • : स्थानीय (निर्धारित समयक्षेत्र में परिवर्तित config.time_zone)
  • : utc (यूटीसी में परिवर्तित)

यहां बताया गया है कि आप सभी उपलब्ध टाइमज़ोन कैसे पा सकते हैं

rake time:zones:all

5
यह सबसे पूर्ण / सटीक उत्तर की तरह लगता है - @Onnipresent
Aegix

2
यह स्वीकृत उत्तर होना चाहिए। यह अधिक पूर्ण है।
एनरिक मोरेनो टेंट

@ Mihai-AndreiDinculescu क्या आपको लगता है कि डेटाबेस datetimeमें यूटीसी में मूल्यों को संग्रहीत करना बेहतर है और फिर उन्हें केवल इस तरह से सामने वाले में बदल दें moment.jsया किसी उपयोगकर्ता के लिए सही समय क्षेत्र में इस डेटा को दिखाने के लिए आप क्या सुझाव देते हैं?
अलेक्सवेंटुरायो

@AlexVentura हाँ, मुझसे ज्यादा चालाक लोग इस बात से सहमत हैं कि UTC में तारीखें जमा करना सबसे अच्छा तरीका है।
Mihai-Andrei Dinculescu

हाँ, मुझे यह मिल गया है। लेकिन आप अलग-अलग समय क्षेत्र वाले किसी भी उपयोगकर्ता के लिए सही मान दिखाने के लिए रेल के विचारों को लागू करने का क्या सुझाव देते हैं?
एलेक्सवेंटुरायो

187

application.rbकाम करने के बाद जोड़ना

 config.time_zone = 'Eastern Time (US & Canada)'
 config.active_record.default_timezone = :local # Or :utc

59
यह मेरे लिए इसके साथ काम कर रहा है:config.time_zone = 'London' config.active_record.default_timezone = :local
डीन पेरी

41
आप इसे चलाने में सभी समय क्षेत्र देख सकते हैं rails c-ActiveSupport::TimeZone.all.map(&:name)
डीन पेरी

5
बहुत बहुत धन्यवाद! मैं इसके साथ संघर्ष कर रहा था। मेरे पास एक विरासत विरासत PHP ऐप है जो एक ही mysql डेटाबेस के साथ बातचीत करता है और स्थानीय रूप से हर समय संग्रहीत करता है; UTC का उपयोग करने के लिए इसे अद्यतन करना एक विकल्प नहीं था। मैंने पहले जो कुछ भी पूरा नहीं किया था: config.time_zone = 'Central Time (US & Canada)' config.active_record.default_timezone = 'Central Time (US & Canada)' लेकिन उसे स्थापित करने के लिए: स्थानीय प्रतीक ने चाल चली।
मैट हक्के

8
रेल गाइड कहते हैं कि config.active_record.default_timezoneकेवल :localया के लिए निर्धारित किया जाना चाहिए :utc। मुझे लगता है कि कुछ और अप्रत्याशित परिणाम होगा।
केल्विन

2
आप इसे चलाकर ऑल टाइम ज़ोन देख सकते हैंrake time:zones:all
ऑरलैंडो

34

मैं बहुत पीड़ा के बाद डीन पेरी के समान निष्कर्ष पर आया। config.time_zone = 'Adelaide'और config.active_record.default_timezone = :localविजेता संयोजन था। यहां मैंने इस प्रक्रिया के दौरान पाया


5
यह सही उत्तर है, default_timezone केवल स्वीकार करता है: स्थानीय या: utc
फ्रांसेस्को बेलाडोना

20

मेरे मामले में (रेल 5), मैंने इन 2 लाइनों को अपने में जोड़कर समाप्त कर दिया app/config/environments/development.rb

config.time_zone = "Melbourne"
config.active_record.default_timezone = :local

बस! और यह सुनिश्चित करने के लिए कि मेलबोर्न सही ढंग से पढ़ा गया था, मैंने अपने टर्मिनल में कमांड चलाया:

bundle exec rake time:zones:all

और मेलबोर्न उस समयक्षेत्र में सूचीबद्ध हो रहा था जब मैं अंदर था!


क्या होगा यदि मैं चाहता हूं कि प्रत्येक उपयोगकर्ता अपने समय क्षेत्र में दिनांक-समय मान देखें?
अलेक्सवेंटुरायो

@AlexVentura जब आप अपने उपयोगकर्ताओं को दिनांक-समय मान दिखाते हैं, तो इसे उनके समय क्षेत्रों में परिवर्तित करें। डेटाबेस रिकॉर्ड को लगातार बनाए
वहीद

10

यदि आप वैश्विक रूप से UTC को टाइमज़ोन सेट करना चाहते हैं, तो आप निम्न 4 में कर सकते हैं:

# Inside config/application.rb
config.time_zone = "UTC"
config.active_record.default_timezone = :utc

अपने आवेदन को पुनः आरंभ करना सुनिश्चित करें या आप परिवर्तन नहीं देखेंगे।


3

4.2.2 रेल पर, पर जाएँ application.rbऔर उपयोग करें config.time_zone='city'(जैसे: 'लंदन' या 'बुखारेस्ट' या 'एम्स्टर्डम' और इसी तरह)।

यह ठीक काम करना चाहिए। इसने मेरे लिए काम किया।


3

मुझे इस ब्लॉक को अपनी environment.rbफ़ाइल में जोड़ना था और सब कुछ ठीक था :)

Rails.application.configure do
    config.time_zone = "Pacific Time (US & Canada)"
    config.active_record.default_timezone = :local
end
  • मैंने इसे लाइन से पहले जोड़ाRails.application.initialize!

1

चीनी उपयोगकर्ता के लिए, बस नीचे दो लाइनें जोड़ें config/application.rb:

config.active_record.default_timezone = :local
config.time_zone = 'Beijing'

0

रूबी ऑन रेल्स 6.0.1 में कॉन्फिग > लोकेशन > एप्लीकेशन. rb y agrega lo siguiente पर जाएं:

require_relative 'boot'

require 'rails/all'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module CrudRubyOnRails6
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.0

    config.active_record.default_timezone = :local
    config.time_zone = 'Lima'

    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration can go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded after loading
    # the framework and any gems in your application.
  end
end

आप देख सकते हैं कि मैं समय रेखा को 2 लाइनों के साथ कॉन्फ़िगर कर रहा हूं:

config.active_record.default_timezone =: local
config.time_zone = 'Lima'

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


-2

यदि आप सेट करने के लिए स्थानीय समय चाहते हैं, तो निम्न पाठ जोड़ें application.rb

config.time_zone = 'Chennai'

# WARNING: This changes the way times are stored in the database (not recommended)
config.active_record.default_timezone = :local

फिर अपने सर्वर को पुनरारंभ करें


12
default_timezone दो विकल्पों में से एक को स्वीकार करता है ..: स्थानीय या: utc .. यह किसी विशिष्ट समय क्षेत्र को स्वीकार नहीं करता है, इसलिए यह काम नहीं करेगा .. आपको default_timezone को स्थानीय में सेट करने की आवश्यकता है
Urkle
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.