আমি কীভাবে টসস্ট্রিং () এর সাথে একটি অবিরাম ডেটটাইম ফর্ম্যাট করতে পারি?


226

আমি কীভাবে ডাবল ডেটটাইম dt2 কে একটি ফর্ম্যাট স্ট্রিংয়ে রূপান্তর করতে পারি ?

DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MM-dd hh:mm:ss")); //works

DateTime? dt2 = DateTime.Now;
Console.WriteLine(dt2.ToString("yyyy-MM-dd hh:mm:ss")); //gives following error:

টুস্ট্রিং পদ্ধতিতে কোনও ওভারলোড কোনও যুক্তি নেয় না


3
হ্যালো, আপনি গৃহীত এবং বর্তমানের উত্তরগুলি পর্যালোচনা করতে কিছু মনে করবেন? আজকের দিনের আরও প্রাসঙ্গিক উত্তরটি আরও সঠিক হতে পারে।
iuliu.net

উত্তর:


334
Console.WriteLine(dt2 != null ? dt2.Value.ToString("yyyy-MM-dd hh:mm:ss") : "n/a"); 

সম্পাদনা: অন্যান্য মন্তব্যে যেমন বলা হয়েছে, পরীক্ষা করুন যে একটি নন-মান রয়েছে।

আপডেট: মন্তব্যগুলিতে প্রস্তাবিত হিসাবে, এক্সটেনশন পদ্ধতি:

public static string ToString(this DateTime? dt, string format)
    => dt == null ? "n/a" : ((DateTime)dt).ToString(format);

এবং সি # 6 থেকে শুরু করে, আপনি কোড আরও বেশি সরল করতে নাল-শর্তযুক্ত অপারেটরটি ব্যবহার করতে পারেন । নীচের অভিব্যক্তিটি শূন্য হলে নাল ফিরে আসবে DateTime?

dt2?.ToString("yyyy-MM-dd hh:mm:ss")

26
দেখে মনে হচ্ছে এটি আমার কাছে একটি এক্সটেনশন পদ্ধতির জন্য ভিক্ষা করছে।
ডেভিড গ্লেন 14

42
.ভ্যালু কী
স্টুয়ার্টডনেট

@ ডেভিড যে কাজটি তুচ্ছ নয় তা জানাচ্ছেন না ... stackoverflow.com/a/44683673/5043056
সিনজাই

3
আপনি কি এই জন্য প্রস্তুত ... তারিখ?। টুস্ট্রিং ("ডিডি / এমএমএম / ইয়ে") ?? "" সি # 6 এর দুর্দান্ত সুবিধা
টম ম্যাকডোনফ 3'18

ত্রুটি CS0029: স্পষ্টভাবে 'স্ট্রিং' টাইপকে 'সিস্টেম.ডেটটাইমে রূপান্তর করতে পারে না?' (CS0029)। । নেট কোর 2.0
ওরাকুলার ম্যান

80

আকারের জন্য এটি ব্যবহার করে দেখুন:

প্রকৃত তারিখটাইম অবজেক্টটি আপনার ফর্ম্যাট করতে খুঁজছেন তা dt.Value প্রোপার্টিতে রয়েছে, এবং নিজেই dt2 অবজেক্টে নেই।

DateTime? dt2 = DateTime.Now;
 Console.WriteLine(dt2.HasValue ? dt2.Value.ToString("yyyy-MM-dd hh:mm:ss") : "[N/A]");

36

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

হালনাগাদ:

আমি আজকের সি # সংকলকটির আপ টু ডেট পদ্ধতিতে উদাহরণগুলি আপডেট করি। শর্তসাপেক্ষে অপারেটরগুলি এবং স্ট্রিং ইন্টারপোলেশন

DateTime? dt1 = DateTime.Now;
DateTime? dt2 = null;

Console.WriteLine("'{0:yyyy-MM-dd hh:mm:ss}'", dt1);
Console.WriteLine("'{0:yyyy-MM-dd hh:mm:ss}'", dt2);
// New C# 6 conditional operators (makes using .ToString safer if you must use it)
// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators
Console.WriteLine(dt1?.ToString("yyyy-MM-dd hh:mm:ss"));
Console.WriteLine(dt2?.ToString("yyyy-MM-dd hh:mm:ss"));
// New C# 6 string interpolation
// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
Console.WriteLine($"'{dt1:yyyy-MM-dd hh:mm:ss}'");
Console.WriteLine($"'{dt2:yyyy-MM-dd hh:mm:ss}'");

আউটপুট: (আমি এতে একক উদ্ধৃতি রেখেছি যাতে আপনি দেখতে পারেন যে এটি শূন্য হয়ে গেলে খালি স্ট্রিং হিসাবে ফিরে আসে)

'2019-04-09 08:01:39'
''
2019-04-09 08:01:39

'2019-04-09 08:01:39'
''

30

অন্যরা যেমন বলেছে যে টুস্ট্রিংয়ের আগে আপনাকে নাল পরীক্ষা করতে হবে তবে নিজেকে পুনরাবৃত্তি করা এড়াতে আপনি এমন একটি এক্সটেনশন পদ্ধতি তৈরি করতে পারেন যা এরকম কিছু:

public static class DateTimeExtensions {

  public static string ToStringOrDefault(this DateTime? source, string format, string defaultValue) {
    if (source != null) {
      return source.Value.ToString(format);
    }
    else {
      return String.IsNullOrEmpty(defaultValue) ?  String.Empty : defaultValue;
    }
  }

  public static string ToStringOrDefault(this DateTime? source, string format) {
       return ToStringOrDefault(source, format, null);
  }

}

যা অনুরোধ করা যেতে পারে:

DateTime? dt = DateTime.Now;
dt.ToStringOrDefault("yyyy-MM-dd hh:mm:ss");  
dt.ToStringOrDefault("yyyy-MM-dd hh:mm:ss", "n/a");
dt = null;
dt.ToStringOrDefault("yyyy-MM-dd hh:mm:ss", "n/a")  //outputs 'n/a'

28

সি # 6.0 বাচ্চা:

dt2?.ToString("dd/MM/yyyy");


2
আমি নিম্নলিখিত সংস্করণটির পরামর্শ দেব যাতে উত্তরটি সি # 6.0 এর বিদ্যমান স্বীকৃত উত্তরের সমান হয়। Console.WriteLine(dt2?.ToString("yyyy-MM-dd hh:mm:ss" ?? "n/a");
বুড করতে পারেন

15

এই প্রশ্নের উত্তর গঠনের ক্ষেত্রে সমস্যাটি হ'ল যখন অবিচ্ছেদ্য তারিখের কোনও মূল্য থাকে না তখন আপনি কাঙ্ক্ষিত আউটপুট নির্দিষ্ট করেন না। নিম্নলিখিত কোডটি DateTime.MinValueএ জাতীয় ক্ষেত্রে আউটপুট দেবে এবং বর্তমানে গৃহীত উত্তরের মতো নয়, এটি ব্যতিক্রম করবে না।

dt2.GetValueOrDefault().ToString(format);

7

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

public static string ToString<T>(this T? variable, string format, string nullValue = null)
where T: struct, IFormattable
{
  return (variable.HasValue) 
         ? variable.Value.ToString(format, null) 
         : nullValue;          //variable was null so return this value instead   
}


5

তুমি ব্যবহার করতে পার dt2.Value.ToString("format") , তবে অবশ্যই এটির জন্য dt2! = নাল প্রয়োজন, এবং এটি প্রথম স্থানে একটি nallable ধরণের ব্যবহার অবহেলা করে।

এখানে বেশ কয়েকটি সমাধান রয়েছে তবে বড় প্রশ্নটি হল: আপনি কীভাবে একটি nullতারিখ বিন্যাস করতে চান ?


5

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

public static class ExtensionMethods
{
    public static string ToString<T>(this Nullable<T> nullable, string format) where T : struct
    {
        return String.Format("{0:" + format + "}", nullable.GetValueOrDefault());
    }

    public static string ToString<T>(this Nullable<T> nullable, string format, string defaultValue) where T : struct
    {
        if (nullable.HasValue) {
            return String.Format("{0:" + format + "}", nullable.Value);
        }

        return defaultValue;
    }
}

4

সংক্ষিপ্ত উত্তর

$"{dt:yyyy-MM-dd hh:mm:ss}"

টেস্ট

DateTime dt1 = DateTime.Now;
Console.Write("Test 1: ");
Console.WriteLine($"{dt1:yyyy-MM-dd hh:mm:ss}"); //works

DateTime? dt2 = DateTime.Now;
Console.Write("Test 2: ");
Console.WriteLine($"{dt2:yyyy-MM-dd hh:mm:ss}"); //Works

DateTime? dt3 = null;
Console.Write("Test 3: ");
Console.WriteLine($"{dt3:yyyy-MM-dd hh:mm:ss}"); //Works - Returns empty string

Output
Test 1: 2017-08-03 12:38:57
Test 2: 2017-08-03 12:38:57
Test 3: 


4

রেজার সিনট্যাক্স:

@(myNullableDateTime?.ToString("yyyy-MM-dd") ?? String.Empty)

2

আমি মনে করি আপনাকে getValueOrDefault- পদ্ধতিটি ব্যবহার করতে হবে। টসস্ট্রিং ("yy ...") এর সাথে আচরণটি সংজ্ঞায়িত করা হয় না যদি উদাহরণটি শূন্য থাকে।

dt2.GetValueOrDefault().ToString("yyy...");

1
ToString ( "yy ...") সঙ্গে আচরণ করা হয় যদি উদাহরণস্বরূপ নাল, কারণ GetValueOrDefault () DateTime.MinValue ফিরে আসবে সংজ্ঞায়িত
লুকাস

2

এক্সটেনশন পদ্ধতি হিসাবে এখানে ব্লেকের দুর্দান্ত উত্তর । এটি আপনার প্রকল্পে যুক্ত করুন এবং প্রশ্নের কলগুলি প্রত্যাশার মতো কাজ করবে।
অর্থ এটি MyNullableDateTime.ToString("dd/MM/yyyy")একই আউটপুট সহ যেমন ব্যবহার করা হয় MyDateTime.ToString("dd/MM/yyyy"), "N/A"তারিখটাইম শূন্য হলে মানটি হবে ।

public static string ToString(this DateTime? date, string format)
{
    return date != null ? date.Value.ToString(format) : "N/A";
}

1

আইফোর্মেটেবলটিতে এমন একটি ফর্ম্যাট সরবরাহকারীও রয়েছে যা ব্যবহার করা যেতে পারে, এটি আইফর্ম্যাটপ্রোভাইডারের উভয় ফর্ম্যাটকে ডটনেট ৪.০ এ নালাগুলির অনুমতি দেয় যা এটি হবে

/// <summary>
/// Extentionclass for a nullable structs
/// </summary>
public static class NullableStructExtensions {

    /// <summary>
    /// Formats a nullable struct
    /// </summary>
    /// <param name="source"></param>
    /// <param name="format">The format string 
    /// If <c>null</c> use the default format defined for the type of the IFormattable implementation.</param>
    /// <param name="provider">The format provider 
    /// If <c>null</c> the default provider is used</param>
    /// <param name="defaultValue">The string to show when the source is <c>null</c>. 
    /// If <c>null</c> an empty string is returned</param>
    /// <returns>The formatted string or the default value if the source is <c>null</c></returns>
    public static string ToString<T>(this T? source, string format = null, 
                                     IFormatProvider provider = null, 
                                     string defaultValue = null) 
                                     where T : struct, IFormattable {
        return source.HasValue
                   ? source.Value.ToString(format, provider)
                   : (String.IsNullOrEmpty(defaultValue) ? String.Empty : defaultValue);
    }
}

নামযুক্ত পরামিতিগুলির সাথে একসাথে ব্যবহার করে আপনি করতে পারেন:

dt2.ToString (defaultValue: "n / a");

ডটনেটের পুরানো সংস্করণগুলিতে আপনি প্রচুর ওভারলোড পান

/// <summary>
/// Extentionclass for a nullable structs
/// </summary>
public static class NullableStructExtensions {

    /// <summary>
    /// Formats a nullable struct
    /// </summary>
    /// <param name="source"></param>
    /// <param name="format">The format string 
    /// If <c>null</c> use the default format defined for the type of the IFormattable implementation.</param>
    /// <param name="provider">The format provider 
    /// If <c>null</c> the default provider is used</param>
    /// <param name="defaultValue">The string to show when the source is <c>null</c>. 
    /// If <c>null</c> an empty string is returned</param>
    /// <returns>The formatted string or the default value if the source is <c>null</c></returns>
    public static string ToString<T>(this T? source, string format, 
                                     IFormatProvider provider, string defaultValue) 
                                     where T : struct, IFormattable {
        return source.HasValue
                   ? source.Value.ToString(format, provider)
                   : (String.IsNullOrEmpty(defaultValue) ? String.Empty : defaultValue);
    }

    /// <summary>
    /// Formats a nullable struct
    /// </summary>
    /// <param name="source"></param>
    /// <param name="format">The format string 
    /// If <c>null</c> use the default format defined for the type of the IFormattable implementation.</param>
    /// <param name="defaultValue">The string to show when the source is null. If <c>null</c> an empty string is returned</param>
    /// <returns>The formatted string or the default value if the source is <c>null</c></returns>
    public static string ToString<T>(this T? source, string format, string defaultValue) 
                                     where T : struct, IFormattable {
        return ToString(source, format, null, defaultValue);
    }

    /// <summary>
    /// Formats a nullable struct
    /// </summary>
    /// <param name="source"></param>
    /// <param name="format">The format string 
    /// If <c>null</c> use the default format defined for the type of the IFormattable implementation.</param>
    /// <param name="provider">The format provider (if <c>null</c> the default provider is used)</param>
    /// <returns>The formatted string or an empty string if the source is <c>null</c></returns>
    public static string ToString<T>(this T? source, string format, IFormatProvider provider)
                                     where T : struct, IFormattable {
        return ToString(source, format, provider, null);
    }

    /// <summary>
    /// Formats a nullable struct or returns an empty string
    /// </summary>
    /// <param name="source"></param>
    /// <param name="format">The format string 
    /// If <c>null</c> use the default format defined for the type of the IFormattable implementation.</param>
    /// <returns>The formatted string or an empty string if the source is null</returns>
    public static string ToString<T>(this T? source, string format)
                                     where T : struct, IFormattable {
        return ToString(source, format, null, null);
    }

    /// <summary>
    /// Formats a nullable struct
    /// </summary>
    /// <param name="source"></param>
    /// <param name="provider">The format provider (if <c>null</c> the default provider is used)</param>
    /// <param name="defaultValue">The string to show when the source is <c>null</c>. If <c>null</c> an empty string is returned</param>
    /// <returns>The formatted string or the default value if the source is <c>null</c></returns>
    public static string ToString<T>(this T? source, IFormatProvider provider, string defaultValue)
                                     where T : struct, IFormattable {
        return ToString(source, null, provider, defaultValue);
    }

    /// <summary>
    /// Formats a nullable struct or returns an empty string
    /// </summary>
    /// <param name="source"></param>
    /// <param name="provider">The format provider (if <c>null</c> the default provider is used)</param>
    /// <returns>The formatted string or an empty string if the source is <c>null</c></returns>
    public static string ToString<T>(this T? source, IFormatProvider provider)
                                     where T : struct, IFormattable {
        return ToString(source, null, provider, null);
    }

    /// <summary>
    /// Formats a nullable struct or returns an empty string
    /// </summary>
    /// <param name="source"></param>
    /// <returns>The formatted string or an empty string if the source is <c>null</c></returns>
    public static string ToString<T>(this T? source) 
                                     where T : struct, IFormattable {
        return ToString(source, null, null, null);
    }
}


0

সাধারণ জেনেরিক এক্সটেনশন

public static class Extensions
{

    /// <summary>
    /// Generic method for format nullable values
    /// </summary>
    /// <returns>Formated value or defaultValue</returns>
    public static string ToString<T>(this Nullable<T> nullable, string format, string defaultValue = null) where T : struct
    {
        if (nullable.HasValue)
        {
            return String.Format("{0:" + format + "}", nullable.Value);
        }

        return defaultValue;
    }
}

-2

হতে পারে এটি দেরিতে উত্তর তবে অন্য কারও সাহায্য করতে পারে।

সহজ:

nullabledatevariable.Value.Date.ToString("d")

বা "ডি" পরিবর্তে কেবল কোনও বিন্যাস ব্যবহার করুন।

সেরা


1
যখন nullabledatevariable.Value নাল হয় ত্রুটি ঘটবে।
জন সি

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