无论文化如何,在标签中格式化日期

Posted

技术标签:

【中文标题】无论文化如何,在标签中格式化日期【英文标题】:Format a date in label regardless of culture 【发布时间】:2011-10-26 15:10:59 【问题描述】:

在我的 ascx 页面中:

    <tr>
        <td class="lbl">Geboortedatum</td>
        <td class="lbl">:</td>
        <td class="data">
            <asp:Label ID="tbBirthDate"  CssClass="details" runat="server" />
        </td>
    </tr>

这个生日是从cs文件中填写的:

        var cust = (from c in db.tbCustomers
                    join s in db.tbStreets on new  c.StreetId, c.PostCode  equals new  s.StreetId, s.PostCode 
                    join p in db.tbPostalAreas on s.PostCode equals p.PostCode
                    where c.Id == customerId
                    select new
                    
                        FirstNames = c.FirstNames,
                        MiddleName = c.MiddleName,
                        LastName = c.LastName,
                        BirthDate = string.Format("0:dd-mm-yyyy", c.BirthDate.Value.ToShortDateString()),
                        StreetName = s.Street,
                        HouseNumber = c.HouseNumber,
                        PostCode = c.PostCode,
                        PostCodeLetters = c.StreetId,
                        City = p.City,
                        Email = c.Email,
                        Mobile = c.PhoneMobile,
                        PickUpAddress = c.PickupAddress

                    ).SingleOrDefault();

        if (cust != null)
        
            tbFirstName.Text = cust.FirstNames;
            tbLastName.Text = (cust.MiddleName != null) ? cust.MiddleName + " " + cust.LastName : cust.LastName;
            tbBirthDate.Text = cust.BirthDate;
            tbStreetName.Text = cust.StreetName + " " + cust.HouseNumber;
            tbPostCode.Text = cust.PostCode + " " + cust.PostCodeLetters;
            tbCity.Text = cust.City;
            tbEmail.Text = cust.Email;
            tbMobile.Text = cust.Mobile;
            tbPickupAddress.Text = cust.PickUpAddress;
        

现在在本地运行时,我得到一个日期,例如 26-10-2011,但是当放在我的服务器上时,我得到 10/26/2011 如何强制日期显示为 26-10-2011 ?

【问题讨论】:

【参考方案1】:

您尝试将日期格式化两次:

string.Format("0:dd-mm-yyyy", c.BirthDate.Value.ToShortDateString())

删除对ToShortDateString的调用

string.Format("0:dd-mm-yyyy", c.BirthDate.Value)

更新

或者更好:

c.BirthDate.Value.ToString("dd-MM-yyyy")

要真正确定文化不会影响事物,您可以明确指定文化:

c.BirthDate.ToString("dd-MM-yyyy", 
    CultureInfo.GetCultureInfo("en-US").DateTimeFormat)

【讨论】:

不幸的是,这并没有改变任何东西 那么这里肯定有其他事情发生,因为“dd-mm-yyyy”会在“mm”上产生分钟。如果您没有看到行为发生任何变化,则可能是某些事情没有得到正确应用。尝试将此逻辑提取到一个单独的方法中,并在该方法中放置一个断点以查看它是否正在运行。【参考方案2】:

我想如果你替换:

BirthDate = string.Format("0:dd-mm-yyyy", c.BirthDate.Value.ToShortDateString()),

与:

BirthDate = string.Format("0:dd-mm-yyyy", c.BirthDate.Value).

它应该可以工作

【讨论】:

【参考方案3】:

你的问题在这里:

string.Format("0:dd-mm-yyyy", c.BirthDate.Value.ToShortDateString())

您正在尝试将日期格式化为具有特定格式的字符串,但您已经将日期转换为带有ToShortDateString 的字符串(使用当前文化)。您在string.Format 中指定的格式对字符串没有意义...

相反,您应该像这样格式化日期:

c.BirthDate.ToString("dd-MM-YYYY");

顺便说一下,注意“MM”部分而不是“mm”:mm 是分钟,这证明您指定的格式没有在您当前的代码中考虑

【讨论】:

【参考方案4】:

BirthDate = string.Format("0:dd-mm-yyyy", c.BirthDate.Value.ToShortDateString()) 替换为BirthDate = string.Format("0:dd-mm-yyyy", c.BirthDate.Value)

第一种形式首先获取日期,然后是短日期字符串的本地形式,然后对其执行不执行任何操作的格式。第二个获取日期,然后对其进行格式化,将其放入 dd-mm-yyyy

【讨论】:

【参考方案5】:

你为什么不做这条线

 tbBirthDate.Text = cust.BirthDate;

转入tbBirthDate.Text = cust.BirthDate.ToString("dd-MM-yyyy")

这当然不会考虑任何文化信息!

【讨论】:

以上是关于无论文化如何,在标签中格式化日期的主要内容,如果未能解决你的问题,请参考以下文章

如何根据浏览器文化格式化 JavaScript 日期?

如何在asp.net core razor pages 2.2中设置日期格式和文化

如何修改 Blazor(服务器)中的当前文化日期格式?

将任何日期字符串转换为当前文化日期格式

Oracle 根据浏览器文化返回日期时间格式

无论文化信息如何,C# 解析为日期时间