【问题标题】:How to change date Culture of a dateTime in DataTable or from GridView?如何在 DataTable 或 GridView 中更改 dateTime 的日期文化?
【发布时间】:2014-02-06 07:13:36
【问题描述】:

我在数据库中有一些字段,其中两个作为 DateTime 字段,我通过 GridView 中的“DataTable”检索它,如下面的代码所示

C#代码

var connection = new MySqlConnection(_TestMySqlConString);
string query1 = myQuery;
var cmd1 = new MySqlCommand(query1, connection);
connection.Open();
var dataTable1 = new DataTable();
var da1 = new MySqlDataAdapter(cmd1);
da1.Fill(dataTable1);
grdInvitationTendersList.DataSource = dataTable1;
grdInvitationTendersList.DataBind();

ASP 代码

<asp:GridView ID="grdList" runat="server"
                AllowSorting="True" AutoGenerateColumns="False"
                DataKeyNames="R_NUMBER" OnRowCommand="grdList_RowCommand" >
                <AlternatingRowStyle BackColor="White" />
 <Columns>
....
                      <asp:BoundField DataField="TENDER_NUMBER" HeaderText="T_NUMBER" ReadOnly="True" SortExpression="T_NUMBER"  Visible="TRUE"></asp:BoundField>

<asp:BoundField DataField="LAST_DATE_SUBMISSION" HeaderText="Last Date of Submission" ReadOnly="True" SortExpression="LAST_DATE_SUBMISSION" HeaderStyle-BorderStyle="Solid"
                        HeaderStyle-HorizontalAlign="Right" FooterStyle-BackColor="pink" FooterStyle-BorderColor="White" Visible="True" DataFormatString="{0:g}"></asp:BoundField>
......
 </Columns>

LAST_DATE_SUBMISSION 是一个 dateTime 字段。

我的问题是我怎样才能在yyyy/MM//dd hh:mm:ss 中有日期时间,我必须转换culture 并在 GridView 中显示日期时间

*编辑 1:* I admit that my question is not cleared. Let me explain more, My second part of question is that "I have to convert the Datetime to other Calender type and then display in the GridView"

【问题讨论】:

  • 您是否在询问如何独立于当前文化设置 DateTime 格式模式?
  • 我要求我在数据库中有一个公历日期(通过数据表获取),并希望转换为其他日历类型,然后在 GridView 中显示。
  • 查看我的答案的编辑 - DateTime 始终是有效的公历,但如果您使用具有不同日历系统的文化,它将自动转换。

标签: c# asp.net date datetime


【解决方案1】:

DateTime 值本身具有文化。这只是一个值。我怀疑你应该改变这个:

DataFormatString="{0:g}"

比如改成:

DataFormatString="{0:yyyy/MM/dd HH:mm:ss}"

(请注意 HH 而不是 hh,假设您实际上想要 24 小时视图。同样,我假设您问题中的 // 是一个错字。)

如果您想将其硬编码为特定格式。如果您确实想要“文化的适当格式”,那么您应该在处理请求时确保当前文化是正确的,并且您的原始 DataFormatString 是合适的。

编辑:我现在已经看到您也想更改日历系统 - 在这种情况下,它确实关于确保您使用正确的文化。 DateTime 值没有日历系统;日历系统由其显示所在的文化决定。

另一种方法是使用我的 Noda Time 库 - 将值转换为带有您想要的任何日历的 LocalDateTime,它可以独立于文化显示。

【讨论】:

  • 给出的答案与我将提供的相同(确保他的答案比我的好十亿倍)如果您检查此链接msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx,您会发现格式说明符“d”将更改日期格式根据线程文化。
  • @EmadMokhtar 我应该使用&lt;asp:BoundField DataField="LAST_DATE_SUBMISSION" HeaderText="Last Date of Submission" ReadOnly="True" SortExpression="LAST_DATE_SUBMISSION" Visible="True" DataFormatString="{0:d}"&gt;&lt;/asp:BoundField&gt; 并在 ASP 页面上使用我需要的文化吗?
  • @AbdulAziz:那只给出日期 - 你是在寻找日期,还是在寻找日期和时间?
  • @JonSkeet 谢谢,我知道如果我使用{0:g},我可以得到这样的东西(2009 年 6 月 15 日下午 1:45)但是当我使用Culture="ar-SA" 的文化时,它说那"Specified time is not supported in this calendar"
  • @AbdulAziz:这表明您没有设法正确地提取日期和时间。它对我来说很好 - new DateTime(2009, 6, 15, 13, 35, 0).ToString("g", new CultureInfo("ar-SA")) 给出“22/06/30 01:45”后跟一个在我的控制台上无法正确显示的月份名称。
【解决方案2】:

DataFormatString 更改为{0:yyyy/MM/dd hh:mm:ss}

<asp:BoundField DataField="LAST_DATE_SUBMISSION" HeaderText="Last Date of Submission" ReadOnly="True" SortExpression="LAST_DATE_SUBMISSION" HeaderStyle-BorderStyle="Solid" HeaderStyle-HorizontalAlign="Right" FooterStyle-BackColor="pink" FooterStyle-BorderColor="White" Visible="True" DataFormatString="{0:yyyy/MM/dd hh:mm:ss}" </asp:BoundField>

我希望这对你有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多