রেলগুলির এক সময় অঞ্চল থেকে অন্য সময়কে রূপান্তর করুন


105

আমার created_atটাইমস্ট্যাম্পগুলি ইউটিসিতে সংরক্ষণ করা হয়েছে:

>> Annotation.last.created_at
=> Sat, 29 Aug 2009 23:30:09 UTC +00:00

আমি তাদের একজনকে কীভাবে 'পূর্ব সময় (মার্কিন যুক্তরাষ্ট্র এবং কানাডা)' তে রূপান্তর করব (দিবালোকের সঞ্চয়গুলি গ্রহণ করে)? কিছুটা এইরকম:

Annotation.last.created_at.in_eastern_time

উত্তর:


191

ডেটটাইম শ্রেণীর in_Time_zone পদ্ধতিটি ব্যবহার করুন

Loading development environment (Rails 2.3.2)
>> now = DateTime.now.utc
=> Sun, 06 Sep 2009 22:27:45 +0000
>> now.in_time_zone('Eastern Time (US & Canada)')
=> Sun, 06 Sep 2009 18:27:45 EDT -04:00
>> quit

সুতরাং আপনার বিশেষ উদাহরণের জন্য

Annotation.last.created_at.in_time_zone('Eastern Time (US & Canada)')

7
অথবা আপনি কেবল ঘন্টা পরিচয় ব্যবহার করতে পারেনnow.in_time_zone(3)
fl00r

8
created_at.in_time_zone("EST")আরও ছোট
অরল্যান্ডো

51
"EST" = "পূর্ব স্ট্যান্ডার্ড সময়", তাই দিবালোক সংরক্ষণের সময় ভুল হবে। "ইস্টার্ন টাইম (মার্কিন যুক্তরাষ্ট্র এবং কানাডা)" এটি আপনার জন্য ডিএসটি কিনা তা নির্ধারণ করে।
jhiro009

1
মনে রাখবেন যে ইন_টাইম_জোন পদ্ধতিটি অ্যাক্টিভসপোর্টের অংশ, সুতরাং এটি রেলগুলিতে অন্তর্নির্মিত হয় তবে এটি রুবি স্ট্ডলিবের অংশ নয়। আপনার যদি রেল অ্যাপ থাকে তবে কোনও সমস্যা নেই। আপনার যদি সরাসরি রুবি অ্যাপ থাকে তবে আপনার সক্রিয় সমর্থন প্রয়োজন তা নিশ্চিত হওয়া দরকার।
গেইল

এই পদ্ধতির জন্য ডকুমেন্টেশনের লিঙ্কটি এখানে: apidock.com/rails/ তারিখ সময়
নাভেদ খান

17

যদিও এটি একটি পুরানো প্রশ্ন, এটি কিছু উল্লেখ করার মতো। একটি পূর্ববর্তী উত্তর এটি একটি before_filter ব্যবহার করতে temporally সময় অঞ্চল সেট করতে প্রস্তাব দেওয়া হচ্ছে।

আপনার কখনই করা উচিত নয়, কারণ টাইম.জোন থ্রেডে তথ্য সংরক্ষণ করে এবং সম্ভবত এটি থ্রেড দ্বারা পরিচালিত পরবর্তী অনুরোধে ফাঁস হবে।

পরিবর্তে আপনার অনুরোধটি শেষ হওয়ার পরে টাইম জোনটি পুনরায় সেট করা হয়েছে তা নিশ্চিত করার জন্য আপনার চারপাশের ফিল্টার ব্যবহার করা উচিত। কিছুটা এইরকম:

around_filter :set_time_zone

private

def set_time_zone
  old_time_zone = Time.zone
  Time.zone = current_user.time_zone if logged_in?
  yield
ensure
  Time.zone = old_time_zone
end

এখানে এই সম্পর্কে আরও পড়ুন


1
আজকাল একটি দুর্দান্ত টাইম.উস_জোন পদ্ধতি আছে।
ফ্রিম্যানয়েড

9

যদি আপনি এটি আপনার যোগ করেন /config/application.rb

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

তারপরে আপনি সেল করতে পারেন

Annotation.last.created_at.in_time_zone

নির্দিষ্ট সময় অঞ্চলে সময় পেতে।


আমরা যদি অ্যাপ্লিকেশন.আরবিতে সময় অঞ্চলটি কনফিগার করে থাকি তবে ".in_time_zone" কল করার দরকার নেই। স্বয়ংক্রিয়ভাবে আমাদের jyst Annotation.last.created_at কল করার প্রয়োজনীয়তা জন্য এটা করতে পাগল
বিশাল

3

আপনি কনফিগার যদি আপনার /config/application.rb

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

Time.now.in_time_zone

DateTime.now.in_time_zone

2

আপনার টাইমজোনটি পূর্ব সময়কে সেট করুন।

আপনি আপনার ডিফল্ট সময় অঞ্চলটি কনফিগারেশন / পরিবেশ.আরবিতে সেট করতে পারেন

config.time_zone = "Eastern Time (US & Canada)"

এখন আপনি যে সমস্ত রেকর্ড সরিয়েছেন তা সেই সময় অঞ্চলে থাকবে। আপনার যদি বিভিন্ন টাইম অঞ্চল প্রয়োজন হয় তবে ব্যবহারকারীর টাইম জোনের উপর ভিত্তি করে বলুন আপনি এটি আপনার নিয়ামকের একটি পূর্ববর্তী ফিল্টার দিয়ে পরিবর্তন করতে পারেন।

class ApplicationController < ActionController::Base

  before_filter :set_timezone

  def set_timezone
    Time.zone = current_user.time_zone
  end
end

কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি আপনার সমস্ত সময় ডাটাবেসে ইউটিসি হিসাবে সংরক্ষণ করছেন এবং সবকিছু মিষ্টি হবে।


আপনি যদি মংরেল, পাতলা বা যাত্রীর মতো কোনও অ্যাপ্লিকেশন সার্ভার চালাচ্ছেন তবে এই বিষয়টি গুরুত্বপূর্ণ? তারা একাধিক উদাহরণ চালায়, একক থ্রেডড আমি বিশ্বাস করি? আমি ভুল হতে পারে, জানতে চাই!
নাইটকোডার


এটা '09 এ থাকতে পারে না?
নাইটকোডার

2
@ জেপউইন: এটি অনুসারে: github.com/rails/rails/commit/… এটি থ্রেডটি পাঁচ বছরেরও বেশি সময় থেকে নিরাপদ। আপনার সমস্যার জন্য কোনও উত্স বা উদাহরণ?
পাস্কাল

1
একটি থ্রেড একাধিক সেশন পরিবেশন করতে পারে। ব্যবহারকারী এটি লগ ইন করার পরে এটি একবার সেট করে রেখেছেন, উদাহরণস্বরূপ, লগ ইন করার জন্য লাস্ট ব্যবহারকারী সর্বজন ব্যবহারকারীদের জন্য সময় অঞ্চল নির্ধারণ করবে যার সেশন একই থ্রেড ব্যবহার করে। সুতরাং আপনাকে প্রতিটি পৃষ্ঠার লোডের জন্য প্রতিটি ব্যবহারকারীর জন্য এটি সেট করতে পূর্বের ফিল্টার ব্যবহার করতে হবে।
jpw
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.