[原载于Chinaspx.com]
本来不想对日期格式化这个问题写多少的.
因为在VS.NET中有SDK文档中就有很详细的介绍.怕有盗名的嫌疑.不过在论坛上有不人问这个问题我就在这里进行简单的介绍(以下都以C#代码)
这篇文章只对于日期格式不甚了解的朋友.
ms-help://MS.NETFrameworkSDKv1.1.CHS/vblr7net/html/vafmtUserDefinedDateFormats.htm
是SDK中详细文档.
1)日期格式化显示
在SQL中DateTime为8位长度日期的指定形式为2003-12-31 00:00:00
而在ASP.NET上最常用的只是2003-12-31号一部分而已你可以使用
DateTime.Now.ToString("d")或DateTime.Now.ToShortDateString();
不过具体格式是2003/12/31还是2003-12-31的话要看你的系统配置日期配置是哪一种.
你要想确定取得2003-12-31指定的话使用.Tostring()用户自定义格式 格式的字符可以看上面说到的文档.
如.ToString("yyyy-MM-dd")返回2003-11-25
.ToString("yyyyMMdd")返回20031125
[转自SDK中的文档]
d 将日显示为不带前导零的数字(如 1)。如果这是用户定义的数字格式中的唯一字符,请使用
%d。
dd 将日显示为带前导零的数字(如 01)。
ddd 将日显示为缩写形式(例如 Sun)。
dddd 将日显示为全名(例如 Sunday)。
M 将月份显示为不带前导零的数字(如一月表示为 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %M。
MM 将月份显示为带前导零的数字(例如 01/12/01)。
MMM 将月份显示为缩写形式(例如 Jan)。
MMMM 将月份显示为完整月份名(例如 January)。
gg 显示时代/纪元字符串(例如 A.D.)
h 使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)。如果这是用户定义的数字格式中的唯一字符,请使用 %h。
hh 使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)。
H 使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %H。
HH 使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)。
m 将分钟显示为不带前导零的数字(例如 12:1:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %m。
mm 将分钟显示为带前导零的数字(例如 12:01:15)。
s 将秒显示为不带前导零的数字(例如 12:15:5)。如果这是用户定义的数字格式中的唯一字符,请使用 %s。
ss 将秒显示为带前导零的数字(例如 12:15:05)。
F 显示秒的小数部分。例如,ff 将精确显示到百分之一秒,而 ffff 将精确显示到万分之一秒。
用户定义格式中最多可使用七个 f 符号。如果这是用户定义的数字格式中的唯一字符,请使用 %f。
T 使用 12 小时制,并对中午之前的任一小时显示大写的 A,对中午到 11:59 P.M 之间的任一小时显示大写的 P。如果这是用户定义的数字格式中的唯一字符,请使用 %t。
tt 使用 12 小时制,并对中午之前任一小时显示大写的 AM;对中午到 11:59 P.M 之间的任一小时显示大写的 PM。
y 将年份 (0-9) 显示为不带前导零的数字。如果这是用户定义的数字格式中的唯一字符,请使用%y。
yy 以带前导零的两位数字格式显示年份(如果适用)。
yyy 以四位数字格式显示年份。
yyyy 以四位数字格式显示年份。
z 显示不带前导零的时区偏移量(如 -8)。如果这是用户定义的数字格式中的唯一字符,请使用%z。
zz 显示带前导零的时区偏移量(例如 -08)
zzz 显示完整的时区偏移量(例如 -08:00)
同样对时间也可以进行这样的格式化..你可以使用自定义格式来设置你想要的格式输出.
你可以使用上表中各字符进行任意的组合不管前后次序多少如你写入yyyy-yyyy也是可以的..不过我想没有多少无聊的人会这么做.的以是相当自由的
注意的是:进行格式化的一定要是日期DateTime格式..在SQL中的类型也一样.否则格式无效或出错.特别是在DataGrid常{0:IFromat}的格式中会用到
2)日期的输入
我们在办理入日期格式式常用DateTime.Pares()
但是这个形式的转换是相当有限的,有些C#是会不懂你写入的日期格式的如20031231大家都明白是2003-
12-31号可以C#不认识他.我们可以这样子进行如下
//设置语言国家
System.IFormatProvider format=new System.Globalization.CultureInfo("zh-CN",true);
//指定转换格式
Response.Write(DateTime.ParseExact(this.TextBox1.Text,"yyyyMMdd",format));
这样他就能看出20031231号的日期格式了
不过可惜他只能够对yyyyMMdd形式进行不能对其它格式进行转换是不是美中不足?
不过.NET提供了另一种重载版本.
public static DateTime ParseExact(string, string[], IFormatProvider, DateTimeStyles);
可对指定的几种日期格式进行转换.
不过具体的操作我想还是大家自己去试验一下效果可能会更好一些
DataGrid等控件的自动编号[Taye]
序号<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> | 内容 |
1 | Taye |
2 | BOx |
3 | Glass |
4 | StarCraft |
一、正序
A、AllowPaging=False情况下
<asp:DataGrid id="DataGrid1" runat="server"> |
就可以实现
不过更有趣的方法是使用这个方法
<asp:DataGrid id="DataGrid1" runat="server"> |
也许有些人会觉得很奇怪为什么Items.Count会这样,而不是出来全部总合..但如果你了解绑定的过程时就容易理解.
[从上面来看就是在ItemCreated事件中进行绑定所以得到的Items.Count刚好是当前的序号]
B、AllowPaging="True"下
如果你DataGrid支持分页则可以如下
<asp:DataGrid id="DataGrid1" runat="server" AllowPaging="True"> |
二、倒序的方法
序号 | 内容 |
4 | Taye |
3 | BOx |
2 | Glass |
1 | StarCraft |
由上面可以知道使用
this.DataGrid1.Items.Count - Container.ItemIndex + 1方法是不可能实现的,得到值而且全会为1
分页的情况下更是一样.所以一开始我们就要取得数据源的行数
.cs |
private int rowscount = 0; protected int RowsCount { get{ return rowscount;} set{ this.rowscount = value; } }
private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 if(!IsPostBack) this.BindData(); }
private void BindData() { SqlConnection cn = new SqlConnection("server=(local);database=NorthWind;uid=sa;pwd="); string str=@"SELECT Employees.EmployeeID, Orders.EmployeeID FROM Employees INNER JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID ";
SqlDataAdapter sqlda = new SqlDataAdapter(str,cn); DataSet ds = new DataSet();
sqlda.Fill(ds);
this.RowsCount = ds.Tables[0].Rows.Count;
this.DataGrid1.DataSource = ds; this.DataGrid1.DataBind();
} |
.aspx |
<asp:DataGrid id="DataGrid1" runat="server" AllowPaging="True"> <Columns> <asp:TemplateColumn> <ItemTemplate> <%# RowsCount - DataGrid1.CurrentPageIndex * DataGrid1.PageSize - Container.ItemIndex %> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid> |