ডেটটাইম.টিস্ট্রিং ("এমএম / ডিডি / ইয়ি এইচ: মিমি: এসএসএফএফ") এর ফলে "09/14/2013 07.20.31.371" এর মতো কিছু হয়েছিল


131

আমার কাছে একটি ডাব্লুপি 8 অ্যাপ্লিকেশন রয়েছে যা বর্তমান সময়টিকে একটি ওয়েব পরিষেবায় প্রেরণ করবে।

ফোন করে ডেটটাইম স্ট্রিং পাই

DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff")

বেশিরভাগ ব্যবহারকারীর জন্য এটি দুর্দান্ত কাজ করে এবং আমাকে সঠিক স্ট্রিং দেয় "09/10/2013 04:04:31.415"। তবে কিছু ব্যবহারকারীর জন্য ফলাফলযুক্ত স্ট্রিংটি এমন কিছু "09/14/2013 07.20.31.371"যা আমার ওয়েব পরিষেবায় সমস্যা সৃষ্টি করে।

এটি কিছু সংস্কৃতি ফর্ম্যাট সমস্যা কারণ? আমি কীভাবে নিশ্চিত করতে পারি যে ফলাফলের স্ট্রিংটি বিন্দুর পরিবর্তে কোলন দিয়ে সীমানাবিদ্ধ হয়?


2
পার্থক্যটি হ'ল কোলন বনাম ডট।
এলডোরাডো

উত্তর:


244

এটি কিছু সংস্কৃতি ফর্ম্যাট সমস্যা কারণ?

হ্যাঁ. আপনার ব্যবহারকারীকে এমন সংস্কৃতিতে থাকতে হবে যেখানে সময় বিভাজক একটি বিন্দু। ":" এবং "/" উভয়ই কাস্টম সংবেদনশীল উপায়ে কাস্টম তারিখ এবং সময় বিন্যাসে ব্যাখ্যা করা হয়

আমি কীভাবে নিশ্চিত করতে পারি যে ফলাফলের স্ট্রিংটি বিন্দুর পরিবর্তে কোলন দিয়ে সীমানাবিদ্ধ হয়?

আমি উল্লেখ করার পরামর্শ দেব CultureInfo.InvariantCulture:

string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
                                CultureInfo.InvariantCulture);

বিকল্পভাবে, আপনি কেবল সময় এবং তারিখ বিভাজককে উদ্ধৃত করতে পারেন :

string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");

... তবে এটি আপনাকে "আকর্ষণীয়" ফলাফল দেবে যা আপনি সম্ভবত এমন প্রত্যাশা করেন না যে আপনি যদি এমন সংস্কৃতিতে ব্যবহারকারীদের চালিত হন যেখানে ডিফল্ট ক্যালেন্ডার সিস্টেম গ্রেগরিয়ান ক্যালেন্ডার নয়। উদাহরণস্বরূপ, নিম্নলিখিত কোড নিন:

using System;
using System.Globalization;
using System.Threading;

class Test
{
    static void Main()        
    {
        DateTime now = DateTime.Now;
        CultureInfo culture = new CultureInfo("ar-SA"); // Saudi Arabia
        Thread.CurrentThread.CurrentCulture = culture;
        Console.WriteLine(now.ToString("yyyy-MM-ddTHH:mm:ss.fff"));
    }
} 

এটি আউটপুট উত্পাদন করে (18 ই সেপ্টেম্বর 2013 এ):

11/12/1434 15:04:31.750

আমার অনুমান যে আপনার ওয়েব পরিষেবাটি এতে অবাক হবে!

আমি আসলে করার সুপারিশ করছি না শুধুমাত্র পরিবর্তিত সংস্কৃতি ব্যবহার করে, কিন্তু এছাড়াও একটি ISO-8601 তারিখ বিন্যাস পরিবর্তন:

string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");

এটি বিশ্বব্যাপী স্বীকৃত ফর্ম্যাট - এটিও বাছাইযোগ্য এবং মাস এবং দিনের আদেশটি সুস্পষ্ট করে তোলে। (যেখানে 06/07/2013 পাঠকের সংস্কৃতির উপর নির্ভর করে June ই জুন বা July জুলাই হিসাবে ব্যাখ্যা করা যেতে পারে))


ধন্যবাদ জন। আমি ভেবেছিলাম ফলাফল স্ট্রিংটি বিন্যাসের স্ট্রিংয়ের মতো হবে। আমি আপনার পরামর্শ চেষ্টা করবে।
এলডোরাডো

3
শুধু একটি ছোট বিবেচনা। একটি নির্দিষ্ট কোড থেকে কালচারআইনফো বস্তুটি লোড করার সময় আমি সর্বদা useUserOverrideপরামিতিটিকে মিথ্যাতে সেট করার পরামর্শ দিই , অন্যথায় কিছু ব্যবহারকারীর সেটিংস সংস্কৃতি সেটিংসকে ওভাররাইড করতে পারে। উদাহরণস্বরূপ আপনার ক্ষেত্রে আমি নতুন ব্যবহার করার পরামর্শ দিই CultureInfo("ar-SA", false)
ডেভিড ইকার্দি

@ ডেভিড আইকার্ডি: আকর্ষণীয়, ধন্যবাদ - যদিও এই ক্ষেত্রে সৌদি আরবকে ব্যবহার করার উদ্দেশ্যটি ছিল বিশেষভাবে বলা হয়েছিল কেন আক্রমণকারী সংস্কৃতি ব্যবহার করা সম্ভবত সঠিক is ভবিষ্যতের পোস্টগুলির জন্য এটি মনে রাখবেন।
জন স্কিটি

7
হাফওয়ে খালের এই বিস্তৃত উত্তর, আমি ভাবতে শুরু করি: এটি কি আবার জোন হবে? হাঁ।
হতাশার গ্রিমেস

Html.TextBoxfor (x => x.Date, "{0: MM / dd / yyyy y") এর সাথে কীভাবে পরিচালনা করবেন?
ভিশ্মায়ে

9

:এর বিশেষ অর্থ রয়েছে: এটি সময় বিভাজক। ( কাস্টম তারিখ এবং সময় ফর্ম্যাট স্ট্রিং )।

\এড়াতে ব্যবহার করুন :

DateTime.ToString(@"MM/dd/yyyy HH\:mm\:ss.fff")

বা ব্যবহার করুন CultureInfo.InvariantCulture:

DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff", CultureInfo.InvariantCulture)

আমি দ্বিতীয়টির সাথে যাওয়ার পরামর্শ দিচ্ছি, কারণ /এরও বিশেষ অর্থ রয়েছে (এটি তারিখ বিভাজক )), যাতে আপনারও এতে সমস্যা হতে পারে।


2
এটি কেবল তারিখ বিভাজক সমস্যা
হয়েই নয়

1
আমি এড়াতে পারি না!
শেরিফ মারজৌক

8

আপনি ইনভেয়ারেন্ট কালচার ব্যবহার করতে পারেন কারণ আপনার ব্যবহারকারীর অবশ্যই এমন সংস্কৃতিতে থাকতে হবে যা কোলনের পরিবর্তে বিন্দু ব্যবহার করে:

DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff", CultureInfo.InvariantCulture);

7

আমি উইন্ডোজ 10 এর ইদানীং অন্য দিক থেকে এই সমস্যায় পড়েছিলাম এবং @ সমস্যা সমাধানের ক্ষেত্রে @ জোনস্কিটের উত্তরটি খুব সহায়ক helpful

আমি একটি পরীক্ষা ফর্মের সাথে আরও গবেষণাও করেছি এবং দেখেছি যে বর্তমান সংস্কৃতি যখন রানটাইম ( ) "no"বা "nb-NO"তে সেট করা হয়েছিল Thread.CurrentThread.CurrentCulture = new CultureInfo("no");তখন টসস্ট্রিং ("yyyy-MM-dd HH: মিমি: এসএস") কলটি উইন্ডোজ 7 এ আলাদাভাবে সাড়া ফেলেছিল এবং উইন্ডোজ ১০. এটি উইন্ডোজ H এবং উইন্ডোজ 10-এ এইচএইচ.এম.এসএস-এ প্রত্যাশিত যা প্রত্যাশা করেছিল!

আমি মনে করি এটি কিছুটা ভীতিজনক! যেহেতু আমি বিশ্বাস করি যে সংস্কৃতি হ'ল কমপক্ষে যে কোনও উইন্ডোজ সংস্করণে সংস্কৃতি।


আসলেই এর কারণ কী তা জানতে আমি বেশ কৌতূহল বোধ করব।
লরি পেল্টেন

2
এটি একটি উইন্ডোজ 10 স্থানীয়করণ বাগ হিসাবে স্বীকৃত এবং স্থির করা হয়েছে। সুতরাং ক্লায়েন্ট মেশিনে একটি উইন্ডোজ আপডেট সমস্যার সমাধান করবে। আরও বিস্তারিত এই ব্লগ পোস্টে পাওয়া যায়: heikniemi.net/hardcoded/2015/08/…
হ্যাকন সেলজিসেন

উপরে উল্লিখিত জনি হিকনিমির ব্লগটি ভেঙে গেছে বলে মনে হচ্ছে। প্রাসঙ্গিক উইন্ডোজ আপডেটগুলি যেখানে সমস্যাগুলি স্থির করা হয়েছে সেগুলি এখানে তালিকাভুক্ত করা হয়েছে: 2015-10-09: KB3093266 - উইন্ডোজ 10 KB3088956 - উইন্ডোজ সার্ভার 2012 আর 2 এবং উইন্ডোজ 8.1 KB3088955 - উইন্ডোজ সার্ভার 2012 এবং উইন্ডোজ 8 KB3088957 - উইন্ডোজ 7 এসপি 1, উইন্ডোজ সার্ভার ২০০৮ এসপি 2 , উইন্ডোজ সার্ভার 2008 R2 এসপি 1, এবং উইন্ডোজ ভিস্তা জন্য SP2 আবার ব্লগে লিংক করার চেষ্টা করছেন এই সময় যদিও archive.org: web.archive.org/web/20161030193739/http://www.heikniemi.net/...
Håkon Seljåsen

4

আপনি স্ট্রিং.ফর্ম্যাট ব্যবহার করতে পারেন:

DateTime d = DateTime.Now;
string str = String.Format("{0:00}/{1:00}/{2:0000} {3:00}:{4:00}:{5:00}.{6:000}", d.Month, d.Day, d.Year, d.Hour, d.Minute, d.Second, d.Millisecond);
// I got this result: "02/23/2015 16:42:38.234"

0

তারিখে স্ট্রিংয়ে রূপান্তর করুন

নাম স্পেস ব্যবহার করুন

using System.Globalization;

কোড

string date = DateTime.ParseExact(datetext.Text, "dd-MM-yyyy", CultureInfo.InstalledUICulture).ToString("yyyy-MM-dd");

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