ইউটিসিটিকে স্থানীয় সময়গুলিতে রূপান্তর করুন 3 vert


95

আমি ইউটিসি Timeবা TimeWithZoneস্থানীয় সময়ে রেল 3 এ রূপান্তর করতে সমস্যায় পড়ছি ।

বলুন ইউটিসি-তে momentকিছু Timeপরিবর্তনশীল (যেমন moment = Time.now.utc)। momentডিএসটি (যেমন ইএসটি / ইডিটি ব্যবহার করে) যত্ন নিয়ে আমি কীভাবে আমার টাইম জোনে রূপান্তর করব?

আরও স্পষ্টভাবে, আমি "সোমবার মার্চ 14, 9 এএম" প্রিন্টআউট করতে চাই সময়টি আজ সকাল 9 টা EDT এবং "সোমবার 7 ই মার্চ, সকাল ৯ টা" সময়টি ছিল সকাল last টা EST গত সোমবার হলে।

আশা করি অন্য উপায় আছে?

সম্পাদনা : আমি প্রথমে ভেবেছিলাম "EDT" একটি স্বীকৃত টাইমজোন হওয়া উচিত, তবে "EDT" প্রকৃত টাইমজোন নয়, আরও সময় টাইপের অঞ্চলের মতো। উদাহরণস্বরূপ এটি জিজ্ঞাসা করার কোনও ধারণা নেই Time.utc(2011,1,1).in_time_zone("EDT")। এটি কিছুটা বিভ্রান্তিকর, কারণ "ইএসটি" হ'ল একটি আসল টাইমজোন, এমন কয়েকটি জায়গায় ব্যবহৃত হয় যা দিবালোক সঞ্চয় সময় ব্যবহার করে না এবং (ইউটিসি -5) বছরব্যাপী।

উত্তর:


113

রেলগুলির নিজস্ব নাম রয়েছে। তাদের সাথে দেখুন:

rake time:zones:us

আপনি rake time:zones:allসর্বকালের জন্যও দৌড়াতে পারেন । আরও জোন-সম্পর্কিত রেক কার্যগুলি দেখতে:rake -D time

সুতরাং, ইএসটিতে রূপান্তর করতে, ডিএসটি স্বয়ংক্রিয়ভাবে ক্যাটারিং করুন:

Time.now.in_time_zone("Eastern Time (US & Canada)")

21
আপনি কীভাবে ওয়েব অ্যাপ্লিকেশন অ্যাক্সেসকারী ব্যবহারকারীর জন্য সময় অঞ্চলটি স্বয়ংক্রিয়ভাবে ব্যবহার করতে পারেন?
ডেমোনপোলি

আমি খুঁজে পাওয়া একমাত্র উপায় ছিল জাভাস্ক্রিপ্ট সহ এবং এরপরে এটি সার্ভারে ফেরত দেওয়া। (new Date()).getTimeZoneOffset()। তবে এটি মোটামুটি অসঙ্গতিপূর্ণ, সুতরাং এই লোকটি নিজের লেখা লিখেছেন বলে মনে হচ্ছে: অনলাইনএস্পেক্ট
ডিউক

4
কনফিগারেশন / অ্যাপ্লিকেশন.আরবি
idrinkpabst

আপডেট: লিঙ্কযুক্ত জেএস সমাধানের মালিক নতুন সমাধানের দিকে ইঙ্গিত করেছেন
মাইলস

@ ডমনোপলি আপনি অ্যাপ্লিকেশন কনফিগারেশনে টাইমজোন সেট করতে পারেন config.time_zone = 'Wellington'এবং তারপরে টাইম কোডারেন্ট ব্যবহার করতে পারেন (যা সময়ের সাথে সমান তবে আপনি যে টাইমজোনটি সেট করেছেন তা ব্যবহার করেছেন)
সান

116

Time#localtime কোড চালিত মেশিনের বর্তমান টাইম জোনে আপনাকে সময় দেবে:

> moment = Time.now.utc
  => 2011-03-14 15:15:58 UTC 
> moment.localtime
  => 2011-03-14 08:15:58 -0700 

আপডেট: আপনি যদি নিজের সময় অঞ্চল পরিবর্তে নির্দিষ্ট সময় অঞ্চলে রূপান্তর করতে চান তবে আপনি সঠিক পথে আছেন। তবে, ইএসটি বনাম ইডিটি নিয়ে উদ্বেগের পরিবর্তে, কেবল পূর্ব পূর্ব টাইম জোনেই পাস করুন - এটি ইডিটি বা ইএসটি কিনা সেদিনের ভিত্তিতে জানতে পারবে:

> Time.now.utc.in_time_zone("Eastern Time (US & Canada)")
  => Mon, 14 Mar 2011 11:21:05 EDT -04:00 
> (Time.now.utc + 10.months).in_time_zone("Eastern Time (US & Canada)")
  => Sat, 14 Jan 2012 10:21:18 EST -05:00 

এটি একটি শুরু। আমি কীভাবে বর্তমান টাইম জোনটি সেট করতে পারি (যেহেতু অ্যাপটি কোথায় হোস্ট করা হবে তা আমি এখনও নিশ্চিত নই, সার্ভারটি অন্য টাইমজোন হতে পারে তবে কী ব্যবহার করা উচিত)।
মার্ক-আন্দ্রে লাফোর্টুন

6
"লোকালটাইম" পদ্ধতিটি দুর্দান্ত তবে কোডটি চালিত মেশিনের সময় অঞ্চলটি ওয়েব অ্যাপ্লিকেশনটিতে ব্যবহারকারীর টাইম জোনের মতো সহায়ক নয়। (এখানে উল্লিখিত হিসাবে: stackoverflow.com/questions/6003491/rails-3-user-timezones/… ) আপনি কীভাবে ওয়েব অ্যাপ্লিকেশন অ্যাক্সেস করতে পারেন তার জন্য সময় অঞ্চল আপনি পেতে পারেন?
ডেমোনপোলি

@ ডায়েজ আমি ভেবেছি আপনি আপনার ব্যবহারকারীদের তাদের সময় অঞ্চল বেছে নেওয়ার জন্য একটি বিকল্প সেট আপ করতে এবং in_time_zoneতার সময় অঞ্চল দিয়ে পদ্ধতিটি ব্যবহার করতে পারেন imagine
ডিলান মার্কো

4
ধন্যবাদ, লোকালটাইম পদ্ধতি হ'ল আমার যা প্রয়োজন।
বব

Time.now.localtimeএকটি সাধারণ আইআরবি সেশনে কাজ করে তবে আমি যখন এটি ইউটিসি টাইমজোনটিতে থাকা কোনও মেশিনে চালানোর চেষ্টা করি তখন তা কার্যকর হয় না।
আভা

15

আপনার সিস্টেমের স্থানীয় অঞ্চল ব্যবহার করে এটি কনফিগার করা সহজ, আপনার অ্যাপ্লিকেশনটিতে। Rb এটি যুক্ত করুন

config.time_zone = Time.now.zone

তারপরে, রেলগুলি আপনাকে আপনার স্থানীয় সময়ে টাইমস্ট্যাম্পগুলি দেখায় বা আপনি স্থানীয় সময় পেতে এই নির্দেশের মতো কিছু ব্যবহার করতে পারেন

Post.created_at.localtime

15

local_timeকেবল ক্লায়েন্টের পক্ষে সেগুলি করার জন্য বেসক্যাম্প দ্বারা ডাকা একটি দুর্দান্ত রত্ন রয়েছে , আমি বিশ্বাস করি:

https://github.com/basecamp/local_time


এটি সবচেয়ে ভাল কাজ করে। আমরা ইতিমধ্যে সঞ্চিত সময়টি জানি, এটির ব্যবহারকারীর কাছে ফর্ম্যাটতে দেখানোর উপায়টি আমার মতে ক্লায়েন্টের পক্ষে সবচেয়ে ভালভাবে করা হয় এবং এটি তা করে।
নীরজ শুক্ল

1

কেন জানি না তবে আমার ক্ষেত্রে এটি আগের পরামর্শ মতো কাজ করে না। তবে এটি এর মতো কাজ করে:

Time.now.change(offset: "-3000")

অবশ্যই আপনার offsetনিজের কাছে মান পরিবর্তন করা দরকার ।


0

আপনি আসলে এটা করছেন তাহলে কারণ আপনার ব্যবহারকারীর টাইমজোন পেতে চান তাহলে সব আপনাকে যা করতে হবে আপনি আপনার সময় অঞ্চল পরিবর্তন হয় config/applications.rb

এটার মত:

ডিফল্টরূপে রেলগুলি ইউটিসি-তে আপনার সময় রেকর্ডটি সংরক্ষণ করবে যদি আপনি বর্তমান টাইমজোনটি নির্দিষ্ট করে থাকেন।

config.time_zone = "Singapore"

সুতরাং আপনার যা করতে হবে তা কেবল এটিই এবং আপনি যেতে ভাল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.