日历 System.Globalization.GregorianCalendar 不支持字符串

Posted

技术标签:

【中文标题】日历 System.Globalization.GregorianCalendar 不支持字符串【英文标题】:string is not supported in calendar System.Globalization.GregorianCalendar 【发布时间】:2013-07-10 01:52:33 【问题描述】:

我在 12 点之后的日期之后检索日期时遇到问题。例如:如果我从日历扩展器中单击:2/7/2013 到 19/7 月/2013 年,会出现此错误:表示的 DateTime。

这是我的代码。

    var format = "MM/dd/yyyy";
    DateTime one = DateTime.ParseExact(startdate, format, CultureInfo.InvariantCulture);
    DateTime two = DateTime.ParseExact(enddate, format, CultureInfo.InvariantCulture);



    if (two >= one)
    
        SqlConnection conn = new SqlConnection("Data Source=""catalog="";Integrated Security=True");
        conn.Open();
        SqlCommand cmd = new SqlCommand("SELECT Name,CLass, NRIC, StallNo, AmountSpent ,TimeDate=convert(nvarchar,timedate,103)  FROM StudentTransactions WHERE TimeDate BETWEEN '" + one + "' AND '" + two + "'", conn);
        SqlDataReader reader = cmd.ExecuteReader();
        GridView1.DataSource = reader;
        GridView1.DataSourceID = null;
        GridView1.Visible = true;
        GridView1.DataBind(); 
        conn.Close();
   

【问题讨论】:

你看过ParseExact吗? msdn.microsoft.com/en-us/library/ms131038.aspx 你应该使用参数而不是强制onetwo在你的查询中被任意转换回字符串。 【参考方案1】:

试试这个

select CONVERT(varchar,<datecol>,103)      ---  and will return as dd/mm/yyyy

where convert(date,<datecol>) between '' and ''

【讨论】:

SELECT CONVERT(varchar,,103) * FROM StudentTransactions WHERE convert(date,) BETWEEN '" + one + "' AND '" + two + "'", conn ) 我得到了这个错误:' 删除 应该是你的列名 ... select convert(varchar,timedate,103) 效果很好。但我可以知道有没有办法将我得到的 dd/mm/yyyy 的格式更改为 MM/dd/yyyy? 为什么当我选择 2013 年 7 月 13 日以后,它会说:char 数据类型到日期时间数据类型的转换导致日期时间值超出范围。 尝试 convert(nvarchar,timedate,103) 应该可以解决它。【参考方案2】:

如果您想从 CodeBehind 更改 GridView 列的格式,请将 RowDataBound 添加到您的网格视图中。

然后在 GridView_RowDataBound(object sender, GridViewRowEventArgs e) 方法中,您将能够访问 e,这将使您能够访问该行的各个单元格,您可以在其中指定格式。

Reference

Reference2

【讨论】:

@PorWeiting 检查参考2【参考方案3】:

首先确保TimeDate 列的日期部分采用您想要的格式,即“dd/mm/yyyy”。

var format = "dd/mm/yyyy";
DateTime one = DateTime.ParseExact(startdate, format, CultureInfo.InvariantCulture);
DateTime two = DateTime.ParseExact(enddate, format, CultureInfo.InvariantCulture);

编辑: 要格式化输出,您可以执行以下操作: 假设您在 GridView1 上的 TimeDate 上有一个 Boundfield:

<asp:BoundField DataField="TimeDate" HeaderText="TimeDate" DataFormatString="0:dd/MM/yyyy" />

您也可以使用DataFormatString="0:d" 以您当前文化的短日期格式输出日期。

【讨论】:

打印出来的数据还是这个格式。这是 mm/dd/yyyy 时间:7/3/2013 12:00:00 AM 我想删除时间并将格式更改为 dd/mm/yyyy。 哦...所以您正在尝试格式化输出..我误解了这个问题..会更新我的答案。 请查看我的编辑...如果它不起作用,请提供更多信息。你的代码。 它仍然无法正常工作。日期格式为 MM/dd/yyyy,这导致当我从 7 月 12 日开始从日历扩展器中选择日期时,它让我一直遇到此错误:将 char 数据类型转换为 datetime 数据类型导致输出范围内的日期时间值。 我从另一个 aspx 页面的日期选择器中读取我的日期并通过会话传递日期,这是我如何检索它的代码:string startdate = (string)(Session["startdate"] );我的来自 gridview 的 aspx 页面从我上面所说的 sql 语句中读取数据。

以上是关于日历 System.Globalization.GregorianCalendar 不支持字符串的主要内容,如果未能解决你的问题,请参考以下文章

2021年日历表打印版,2021年日历表

2021年全年日历一张,怎么做日历简单又漂亮?

Android日历——基于RecyclerView的日历

Android 日历问题

带有谷歌日历的完整日历

java题目,日历类,求助。