C# 根据用户设置格式化日期和时间,但添加前导零

C# 根据用户设置格式化日期和时间,但添加前导零,c#,formatting,C#,Formatting,我知道我可以通过使用datetime.ToString(“G”)从操作系统的用户设置中获得正确的时间格式,但是我想添加前导零,以确保日期/时间在列中对齐。有没有办法用前导零格式化时间(不使用自定义格式字符串),并以用户设置的格式输出?您不能同时使用默认格式和自定义格式 我认为您需要了解的是如何计算特定区域性和相应分隔符的日/月/年顺序,并在此基础上创建自定义字符串 旁注: 您可以考虑简单地将您的结果值在文本表中按空格对齐。 如果希望数据用于除人类消费以外的任何用途,则使用通用格式(可能使用UT

我知道我可以通过使用datetime.ToString(“G”)从操作系统的用户设置中获得正确的时间格式,但是我想添加前导零,以确保日期/时间在列中对齐。有没有办法用前导零格式化时间(不使用自定义格式字符串),并以用户设置的格式输出?

您不能同时使用默认格式和自定义格式

我认为您需要了解的是如何计算特定区域性和相应分隔符的日/月/年顺序,并在此基础上创建自定义字符串

旁注:

    <>您可以考虑简单地将您的结果值在文本表中按空格对齐。<李>
  • 如果希望数据用于除人类消费以外的任何用途,则使用通用格式(可能使用UTC值)更好

不能同时使用默认格式和自定义格式

我认为您需要了解的是如何计算特定区域性和相应分隔符的日/月/年顺序,并在此基础上创建自定义字符串

旁注:

    <>您可以考虑简单地将您的结果值在文本表中按空格对齐。<李>
  • 如果希望数据用于除人类消费以外的任何用途,则使用通用格式(可能使用UTC值)更好
G和G模式取决于d(短日期)模式。看

您可以基于
CultureInfo.CurrentCulture
构建自定义
CultureInfo
DateTimeFormatInfo
对象,但不是直接从源区域性复制
ShortDatePattern
,而是将出现的任何单个字母“M”或“d”分别替换为“MM”和“dd”。

模式依赖于“d”(短日期)模式。看


您可以基于
CultureInfo.CurrentCulture
构建自定义
CultureInfo
DateTimeFormatInfo
对象,但不是直接从源区域性复制
ShortDatePattern
,而是将出现的任何单个字母“M”或“d”替换为“MM”和“dd”,分别。

有点低俗,但它很管用

                    CultureInfo ci = CultureInfo.CurrentUICulture;

                string longtimepattern = ci.DateTimeFormat.LongTimePattern;
                longtimepattern = longtimepattern.Replace("m", "mm").Replace("mmmm", "mm") ;
                longtimepattern = longtimepattern.Replace("h", "hh").Replace("hhhh", "hh");
                longtimepattern = longtimepattern.Replace("H", "HH").Replace("HHHH", "HH");
                longtimepattern = longtimepattern.Replace("s", "ss").Replace("ssss", "ss");

                string shortdatepattern = ci.DateTimeFormat.ShortDatePattern;
                shortdatepattern = shortdatepattern.Replace("d", "dd").Replace("dddd", "dd");
                shortdatepattern = shortdatepattern.Replace("M", "MM").Replace("MMMM", "MM");

                string datestr = new DateTime(obj.TestDateTime_utc).ToLocalTime().ToString(shortdatepattern + " " + longtimepattern);

有点低俗,但很管用

                    CultureInfo ci = CultureInfo.CurrentUICulture;

                string longtimepattern = ci.DateTimeFormat.LongTimePattern;
                longtimepattern = longtimepattern.Replace("m", "mm").Replace("mmmm", "mm") ;
                longtimepattern = longtimepattern.Replace("h", "hh").Replace("hhhh", "hh");
                longtimepattern = longtimepattern.Replace("H", "HH").Replace("HHHH", "HH");
                longtimepattern = longtimepattern.Replace("s", "ss").Replace("ssss", "ss");

                string shortdatepattern = ci.DateTimeFormat.ShortDatePattern;
                shortdatepattern = shortdatepattern.Replace("d", "dd").Replace("dddd", "dd");
                shortdatepattern = shortdatepattern.Replace("M", "MM").Replace("MMMM", "MM");

                string datestr = new DateTime(obj.TestDateTime_utc).ToLocalTime().ToString(shortdatepattern + " " + longtimepattern);
获取日期时间格式化值

 this.textBox1.Text = DateTime.Now.GetLocaleDateTimeFormating();
获取日期时间格式化值

 this.textBox1.Text = DateTime.Now.GetLocaleDateTimeFormating();

你的意思是“0”+(datetime.ToString(“G”);如果您不想使用“自定义格式字符串”,如何根据用户设置设置Datetime的格式?“u”不起作用,因为它是一个通用模式,我想使用locale模式,但是我还想确保前导零@husnain我想在某种程度上我确实希望使用自定义格式字符串,但我希望它是用户根据其区域设置指定的格式字符串。您是指“0”+(datetime.ToString(“G”);如果您不想使用“自定义格式字符串”,如何根据用户设置设置Datetime的格式?“u”不起作用,因为它是一个通用模式,我想使用locale模式,但是我还想确保前导零@husnain我想在某种程度上我确实希望使用自定义格式字符串,但我希望它是用户根据其区域设置指定的格式字符串。