স্ট্রিং একটি বৈধ ডেটটাইম "ফর্ম্যাট ডিডি / এমএম / ইয়াই" হিসাবে স্বীকৃত ছিল না


172

আমি আমার স্ট্রিং ফর্ম্যাট মানটি ফর্ম্যাট সহ তারিখের ধরণে রূপান্তর করার চেষ্টা করছি dd/MM/yyyy

this.Text="22/11/2009";

DateTime date = DateTime.Parse(this.Text);

সমস্যাটা কি ? এটির একটি দ্বিতীয় ওভাররাইড রয়েছে যা জিজ্ঞাসা করে IFormatProvider। এটা কি? না আমি এই এছাড়াও পাস করতে হবে? যদি হ্যাঁ এই ক্ষেত্রে এটি কীভাবে ব্যবহার করবেন?

সম্পাদন করা

Parseএবং মধ্যে পার্থক্য কি ParseExact?

সম্পাদনা 2

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

টাইপ সাফটি, পারফরম্যান্স বা আপনার মতো কিছু লাগার মতো সমস্ত দিক বিবেচনা করে কোন উত্তরটি আরও ভাল


7
@ সম্পাদনা: ডকুমেন্টেশনের জন্য এটিই। msdn.microsoft.com/en-us/library/w2sa9yss.aspx
SLaks

2
পার্সেক্স্যাক্ট হ'ল যখন আপনি তারিখের স্ট্রিংয়ের সঠিক ফর্ম্যাটটি জানেন তখন পার্স হ'ল এমন কিছু যখন আপনি চান যা কিছুটা আরও গতিশীল কিছু পরিচালনা করতে পারে।
জিঞ্জারব্রেডবয়

উত্তর:


255

ব্যবহার DateTime.ParseExact

this.Text="22/11/2009";

DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null);

8
আমাদের এখানে কেন নাল পাস করতে হবে?
শান্তনু গুপ্ত

3
ইনপুট "22/11/2009 12:00:00 এএম" বা "22/11/2009" হতে পারে। এছাড়াও উন্নয়ন মেশিনের সংস্কৃতি উত্পাদন সংস্কৃতি থেকে আলাদা হতে পারে। তাহলে উপরের কোডটি কি নির্বিঘ্নে কাজ করবে?
রাহাতুর

8
@ রাহাত, ফর্ম্যাটটি মেলে না পার্সে ঠিক কাজ করবে না। উপরের ফর্ম্যাট প্যাটার্নটি dd/MM/yyyyতাই কোনও সময়ের সাথে একটি পাঠ্য স্ট্রিং সঠিকভাবে পার্স করা যাবে না। আপনাকে হয় সময় কেটে ফেলা বা ফর্ম্যাট প্যাটার্নে অন্তর্ভুক্ত করতে হবে। এর একটি ওভারলোড রয়েছে ParseExactযা বিন্যাসের ধরণগুলির একটি অ্যারে গ্রহণ করে এবং পাঠ্যের সাথে এটি কোনওটির সাথে মিল থাকলে পার্স করবে।
স্যামুয়েল নেফ

7
@ সামুয়েলনিফ আপনি CultureInfo.InvariantCultureযদি কোনওভাবে একটি বিন্যাস সংজ্ঞায়িত করেন তবে আপনি বর্তমানের পরিবর্তে কেন ব্যবহার করবেন না ?
অ্যালভিন ওয়াং

3
@ টুলকিট কারণ হ'ল ফর্ম্যাট স্ট্রিংয়ের স্ল্যাশগুলি আক্ষরিক স্ল্যাশ নয়। তারা বর্তমান সংস্কৃতিতে তারিখ বিভাজক স্ট্রিং দ্বারা প্রতিস্থাপিত হয়। সুতরাং এটি সংস্কৃতির উপর নির্ভর করে এটি উপরে লেখা হয়েছে। স্যামুয়েল নেফ, চেষ্টা করুন Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");, এটি আপনার সমাধানটি ভেঙে দেবে। এটি ঠিক করতে, "dd'/'MM'/'yyyy"(একক উদ্ধৃতি দিয়ে স্ল্যাশগুলি সুরক্ষিত) ব্যবহার করুন, বা @"dd\/MM\/yyyy"(ব্যাকস্ল্যাশ সহ স্ল্যাশ "" পলায়ন ")।
জেপ্পে স্টিগ নীলসেন

44

আপনাকে কল করা দরকার ParseExact, যা একটি তারিখ বিশ্লেষণ করে যা আপনার সরবরাহ করা ফর্ম্যাটের সাথে হুবহু মিলে যায়।

উদাহরণ স্বরূপ:

DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);

IFormatProviderপরামিতি তারিখ বিশ্লেষণ করতে ব্যবহার করতে সংস্কৃতি নির্দিষ্ট করে।
যদি আপনার স্ট্রিং ব্যবহারকারীর কাছ থেকে না আসে তবে আপনার পাস করা উচিত CultureInfo.InvariantCulture
যদি স্ট্রিংটি ব্যবহারকারীর কাছ থেকে আসে তবে আপনার পাস করা উচিত CultureInfo.CurrentCulture, যা ব্যবহারকারীরা নিয়ন্ত্রণ প্যানেলে আঞ্চলিক বিকল্পগুলিতে নির্দিষ্ট করা সেটিংস ব্যবহার করবে।


2
@ স্ল্যাকস: কালচারআইনফো.আইভার্নিয়ান্টকালচার কোডটিতে অবলম্বন নয়। আমার কি কোনও নেমস্পেস ব্যবহার করা দরকার
শান্তনু গুপ্ত

3
using System.Globalization;
এসএলএক্স

2
আপনি ত্রুটিটিতে ডান ক্লিক করতে পারেন এবং সমাধানের জন্য ক্লিক করুন এটি আপনার জন্য নিখোঁজ নেমস্পেসে রাখবে।
Inkey

আপনি ত্রুটিটিকেও ডাবল ক্লিক করতে পারেন এবং ব্যবহার করতে পারেন এমন
নিবন্ধের

স্পেসগুলিও গণনা করা যায়, উদাহরণস্বরূপ যদি আপনার স্ট্রিং ফর্ম্যাটটি "এমএম / ডিডি / ইয়াই এইচ: মিমি: এসএস" (নোট - 2 স্পেস) থাকে - তবে পার্সেক্স্যাক্টের জন্য আপনার ফর্ম্যাটটিতে অবশ্যই স্পেস অন্তর্ভুক্ত করতে হবে
ক্রিস

20

ডেটটাইমটির স্ট্রিং প্রতিনিধিত্বকে পার্স করা একটি কৌতূহলোদ্দীপক বিষয় কারণ বিভিন্ন সংস্কৃতির বিভিন্ন তারিখের ফর্ম্যাট থাকে। । নেট এই তারিখের ফর্ম্যাটগুলি সম্পর্কে অবগত এবং System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormatআপনি কল করার সময় এটিকে আপনার বর্তমান সংস্কৃতি ( ) থেকে টেনে তুলবেDateTime.Parse(this.Text) ;

উদাহরণস্বরূপ, " 22/11/2009 " স্ট্রিং শর্টডেটপ্যাটার্নের সাথে মেলে না মার্কিন যুক্তরাষ্ট্রের জন্য (en-US) তবে এটি ফ্রান্সের (fr-FR) সাথে মিলছে।

এখন, আপনি হয় কল করতে DateTime.ParseExactএবং যে ফর্ম্যাট স্ট্রিংয়ের প্রত্যাশা করছেন তার মধ্যে পাস করতে পারেন বা আপনি একটি উপযুক্ত সংস্কৃতিতে যেতে পারেনDateTime.Parse তারিখটি বিশ্লেষণের আপনি

উদাহরণস্বরূপ, এটি আপনার তারিখটিকে সঠিকভাবে পার্স করবে:

DateTime.Parse( "22/11/2009", CultureInfo.CreateSpecificCulture("fr-FR") );

অবশ্যই, আপনি কেবল এলোমেলোভাবে ফ্রান্স বাছাই করা উচিত নয়, তবে আপনার প্রয়োজনের জন্য উপযুক্ত।

আপনাকে যা System.Threading.Thread.CurrentThread.CurrentCultureনির্ধারণ করতে হবে তা হ'ল সেট করা হয়েছে এবং যদি / কেন এটি আপনার প্রত্যাশা থেকে আলাদা fers


আপনার সমাধানটি আমার পক্ষে কাজ করে না এটি এটির মতো ত্রুটি দেয় "স্ট্রিং একটি বৈধ তারিখের সময় হিসাবে স্বীকৃত ছিল না।" এবং আমি নিম্নলিখিত ইনপুট তারিখটি পার করছি: আপনার সমাধানে "13/06/17" তবে এটি ত্রুটি দেয় P প্লাজ আমাকে সাহায্য করুন।
ঘনশ্যাম লাখানী

16

যদিও উপরের সমাধানগুলি কার্যকর, আপনি নিম্নলিখিতগুলি দিয়ে ওয়েবকনফিগ ফাইলটিও সংশোধন করতে পারেন ...

<configuration>
   <system.web>
     <globalization culture="en-GB"/>
   </system.web>
</configuration>

রেফ: উত্পাদনের মেশিনের তুলনায় স্থানীয় মেশিনে ডেটটাইম ফর্ম্যাট আলাদা


1
অমিত ফিলিপস, আপনি আমার দিন বাঁচিয়েছেন .. আমি সব সম্ভব চেষ্টা করেছিলাম। এবং এই ছোট পরিবর্তন কাজ করে। ধন্যবাদ।
আরএনএইচ

1
অমিত, তুমি সত্যই Godশ্বরের পুত্র।
ফিউরিয়াস বিয়ার

10

আপনার সেই নির্দিষ্ট তারিখের ফর্ম্যাটটির জন্য সংস্কৃতি নির্দিষ্ট করার দরকার হতে পারে:

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); //dd/MM/yyyy

    this.Text="22/11/2009";

    DateTime date = DateTime.Parse(this.Text);

আরও তথ্যের জন্য এখানে যান:

http://msdn.microsoft.com/en-us/library/5hh873ya.aspx


4

অনেক সময় ব্যয় করার পরে আমি সমস্যার সমাধান করেছি

 string strDate = PreocessDate(data);
 string[] dateString = strDate.Split('/');
 DateTime enter_date = Convert.ToDateTime(dateString[1]+"/"+dateString[0]+"/"+dateString[2]);

3

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

Datetime DT = DateTime.ParseExact(STRDATE,"dd/MM/yyyy",System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat)


2
private DateTime ConvertToDateTime(string strDateTime)
{
DateTime dtFinaldate; string sDateTime;
try { dtFinaldate = Convert.ToDateTime(strDateTime); }
catch (Exception e)
{
string[] sDate = strDateTime.Split('/');
sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2];
dtFinaldate = Convert.ToDateTime(sDateTime);
}
return dtFinaldate;
}

1

ঠিক যেমন উপরে কেউ বলেছিল আপনি এটিকে স্ট্রিং প্যারামিটার হিসাবে প্রেরণ করতে পারেন তবে অবশ্যই এটির ফর্ম্যাটটি থাকতে হবে: '20130121' উদাহরণস্বরূপ এবং আপনি এটিকে নিয়ন্ত্রণ থেকে সরাসরি এ ফর্ম্যাটে রূপান্তর করতে পারেন। সুতরাং আপনি এটি উদাহরণস্বরূপ একটি পাঠ্যবক্স থেকে পাবেন:

date = datetextbox.text; // date is going to be something like: "2013-01-21 12:00:00am"

এটিকে রূপান্তর করতে: '20130121' আপনি ব্যবহার করেন:

date = date.Substring(6, 4) + date.Substring(3, 2) + date.Substring(0, 2);

যাতে এসকিউএল এটিকে রূপান্তর করতে পারে এবং এটি আপনার ডেটাবেসে স্থাপন করতে পারে।


0

আপনি এটি ব্যবহার করতে পারেন

this.Text = "22112009";
DateTime newDateTime = new DateTime(Convert.ToInt32(this.Text.Substring(4, 4)), // Year
                                    Convert.ToInt32(this.Text.Substring(2,2)), // Month
                                    Convert.ToInt32(this.Text.Substring(0,2)));// Day

0

কোডের নীচে আমার জন্য কাজ করেছেন:

DateTime date = DateTime.Parse(this.Text, CultureInfo.CreateSpecificCulture("fr-FR"));

নামস্থান

using System.Globalization;

-6

ম্যানুয়ালি পরিবর্তন করুন:

string s = date.Substring(3, 2) +"/" + date.Substring(0, 2) + "/" + date.Substring(6, 4);

11/22/2015 থেকে এটি 22/11/2015 এ রূপান্তরিত হবে

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