C#格式化字符串,日期,时间,货币

时间格式化
有时候我们要对时间进行转换,达到不同的显示效果 
 默认格式为:2005-6-6 14:33:34 
 如果要换成成200506,06-2005,2005-6-6或更多的该怎么办呢 
 我们要用到:DateTime.ToString的方法(String, IFormatProvider) 
  
 using System; 
 using System.Globalization; 
 String format="D"; 
 DateTime date=DataTime.Now; 
 Response.Write(date.ToString(format, DateTimeFormatInfo.InvariantInfo)); 
 结果输出 
 Thursday, June 16, 2005 
  
 参数format格式详细用法 
 格式字符 关联属性/说明 
 d ShortDatePattern 
 D LongDatePattern 
 f 完整日期和时间(长日期和短时间) 
 F FullDateTimePattern(长日期和长时间) 
 g 常规(短日期和短时间) 
 G 常规(短日期和长时间) 
 m、M MonthDayPattern 
 r、R RFC1123Pattern 
 s 使用当地时间的 SortableDateTimePattern(基于 ISO 8601) 
 t ShortTimePattern 
 T LongTimePattern 
 u UniversalSortableDateTimePattern 用于显示通用时间的格式 
 U 使用通用时间的完整日期和时间(长日期和长时间) 
 y、Y YearMonthPattern 
  
 下表列出了可被合并以构造自定义模式的模式。这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制。 
  
 格式模式 说明 
 d 月中的某一天。一位数的日期没有前导零。 
 dd 月中的某一天。一位数的日期有一个前导零。 
 ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 
 dddd 周中某天的完整名称,在 DayNames 中定义。 
 M 月份数字。一位数的月份没有前导零。 
 MM 月份数字。一位数的月份有一个前导零。 
 MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 
 MMMM 月份的完整名称,在 MonthNames 中定义。 
 y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 
 yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 
 yyyy 包括纪元的四位数的年份。 
 gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。 
 h 12 小时制的小时。一位数的小时数没有前导零。 
 hh 12 小时制的小时。一位数的小时数有前导零。 
 H 24 小时制的小时。一位数的小时数没有前导零。 
 HH 24 小时制的小时。一位数的小时数有前导零。 
 m 分钟。一位数的分钟数没有前导零。 
 mm 分钟。一位数的分钟数有一个前导零。 
 s 秒。一位数的秒数没有前导零。 
 ss 秒。一位数的秒数有一个前导零。 
 f 秒的小数精度为一位。其余数字被截断。 
 ff 秒的小数精度为两位。其余数字被截断。 
 fff 秒的小数精度为三位。其余数字被截断。 
 ffff 秒的小数精度为四位。其余数字被截断。 
 fffff 秒的小数精度为五位。其余数字被截断。 
 ffffff 秒的小数精度为六位。其余数字被截断。 
 fffffff 秒的小数精度为七位。其余数字被截断。 
 t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。 
 tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。 
 z 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。 
 zz 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。 
 zzz 完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。 
 : 在 TimeSeparator 中定义的默认时间分隔符。 
 / 在 DateSeparator 中定义的默认日期分隔符。 
 % c 其中 c 是格式模式(如果单独使用)。如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。 
 \ c 其中 c 是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“\\”。 
  
 只有上面第二个表中列出的格式模式才能用于创建自定义模式;在第一个表中列出的标准格式字符不能用于创建自定义模式。自定义模式的长度至少为两个字符;例如, 
  
 DateTime.ToString( "d") 返回 DateTime 值;“d”是标准短日期模式。 
 DateTime.ToString( "%d") 返回月中的某天;“%d”是自定义模式。 
 DateTime.ToString( "d ") 返回后面跟有一个空白字符的月中的某天;“d”是自定义模式。 
  
 比较方便的是,上面的参数可以随意组合,并且不会出错,多试试,肯定会找到你要的时间格式 
 如要得到2005年06月 这样格式的时间 
 可以这样写: 
 date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)

 

=======================================

 


C#字符串的格式化
一、标记
标记(tokenizing)是从文本中提取具体内容的过程。
下面的代码从句子中提取单词,并把它们输出到控制台。
class mytokenizing
{
   static void Main(string[ ] args)
   {
      string mystring="I like this food,are you?";
      char[] separators={' ',',','?',':','!'};
      int startpos=0;
      int endpos=0;
      do
      {
         endpos=mystring.IndexOfAny(separators,startpos);
         if ( endpos==-1 ) endpos=mystring.Length;
         if ( endpos!=startpos )
              Console.WriteLine(mystring.Substring( startpos,(endpos-startpos)));
         startpos=(endpos+1);
      }while(startpos<mystring.Length);
   }
}
I    <== 输出
like
this
food
are
you

二、颠倒字符串次序
class myreverse
{
   static void Main(string [] args)
   {
      string mystring="你们好";
      char[] mychars=mystring.ToCharArray( );
      Array.Reverse(mychars);
      Console.WriteLine(mystring);
      Console.WriteLine(mychars);
   }
}
任何继承于Array的类都能利用Reverse( )方法为数组中的元素重新排序。

三、字符串的插入、删除和替换
示例文件test.txt为字符串的来源。下面代码以Unicode格式读取文本。确保文件保存为读取时的格式。例如记事本允许将代码保存为Unicode:
aaaaaaaa,bbbbbbbb,cccccc
dddddddd,eeeeeeee,ffffff
gggggggg,hhhhhhhh,iiiiii
jjjjjjjj,kkkkkkkk,llllll
下面代码加载数据并处理数据的测试工具。测试结果发送给控制台。
class myprocessfile
{
   static void Main(string [] args)
   {
      const string myName="test.txt";
      Stream readLine;
      TextWirter writeLine;
      StringBuilder sb;
      readLine=File.OpenRead(myName);
      WriteLine=Console.Out;
      StreamReader readLineSReader=new StreamReader(readLine,Encoding.Unicode);
      readLineSReader.BaseStream.Seek(0,SeekOrigin.Begin);
      while(readLineSReader.Peek()>-1)
      {
         sb=new StringBuilder(readLineSReader.ReadLine());
         //插入字符串操作语句如:sb.Append(",123");  
         Console.WriteLine(sb.ToString());
      }
   }
}

在结尾添加一列内容:
//displays aaaaaaaa,bbbbbbbb,cccccc,xxxxx
//……
sb.Append(",xxxxx");

第一列可以使用下面的代码删除:
//displays bbbbbbbb,cccccc
//……
sb.Remove(0,sb.ToString().IndexOf(',')+1);

替换分隔符:
//aaaaaaaa+bbbbbbbb+cccccc
sb.Replace(',','+');

添加行号(lineNumber已经在前面某处声明过为前提):
sb.Insert(0,lineNumber.ToString("000 "));
lineNumber++;

//displays 
//000 aaaaaaaa,bbbbbbbb,cccccc
//001 dddddddd,eeeeeeee,ffffff
//002 gggggggg,hhhhhhhh,iiiiii
//003 jjjjjjjj,kkkkkkkk,llllll

字符串操作

 

——————————————————————————–

1、从字符串中提取子串
StringBuilder 类没有支持子串的方法,因此必须用String类来提取。
string mystring="My name is ynn.";
//Displays "name is ynn."
Console.WriteLine(mystring.Substring( 3 ));
//Displays "ynn"
Console.WriteLine(mystring.Substring( 11,3 ));


2、比较字符串
String 类有四种方法:Compare( )、CompareTo( )、CompareOrdinal( )、Equals( )。
Compare( )方法是CompareTo( )方法的静态版本。只要使用“=”运算符,就会调用Equals( )方法,的以Equals( )方法与“=”是等价的。CompareOrdinal( )方法对两个字符串比较不考本地语言与文件。
示例:
int result;
bool bresult;
s1="aaaa";
s2="bbbb";
//Compare( )method
//result值为“0”表示等,小于零表示 s1 < s2,大于零表示 s1 > s2
result=String.Compare(s1,s2);
result=s1.CompareTo( s2 );
result=String.CompareOrdinal(s1,s2);
bresult=s1.Equals( s2 );
bresult=String.Equals( s1,s2 );
一个例外情况是,两个字符串都是内置的,并相等,静态方法要快得多。

3、字符串格式化

3.1 格式化数字
格式字符    说明和关联属性

 

——————————————————————————–

c、C       货币格式。
d、D       十进制格式。 
e、E       科学计数(指数)格式。 
f、F       固定点格式。 
g、G       常规格式。 
n、N       数字格式。 
r、R       往返格式,确保将已转换成字符串的数字转换回数字时具有与原数字相同的值。 
x、X       十六进制格式。

 

——————————————————————————–

double val=Math.PI;
Console.WriteLine(val.ToString( ));  //displays 3.14159265358979
Console.WriteLine(val.ToString("E"));//displays 3.141593E+000
Console.WriteLine(val.ToString("F3");//displays 3.142
int val=65535;
Console.WriteLine(val.ToString("x"));  //displays ffff
Console.WriteLine(val.ToString("X"));  //displays FFFF
Single val=0.123F;
Console.WriteLine(val.ToString("p"));  //displays 12.30 %
Console.WriteLine(val.ToString("p1"));  //displays 12.3 %
默认格式化会在数字和百分号之间放入一个空格。定制方法如下: 
其中NumberFormatInfo类是System.Globalization命名空间的一个成员,因此该命名空间必须导入到程序中。
Single val=0.123F;
object myobj=NumberFormatInfo.CurrentInfo.Clone( ) as NumberFormatInfo;
NumberFormatInfo myformat=myobj as NumberFormatInfo;
myformat.PercentPositivePattern=1;
Console.WriteLine(val.ToString("p",myformat)); //displays 12.30%;
Console.WriteLine(val.ToString("p1",myformat)); //displays 12.3%;
格式化具有很大的灵活性。下面的例子演示一个没有意义的货币结构:
double val=1234567.89;
int [] groupsize={2,1,3};
object myobj=NumberFormatInfo.CurrentInfo.Clone( );
NumberFormatInfo mycurrency=myobj as NumberFormatInfo;
mycurrency.CurrencySymbol="#"; //符号
mycurrency.CurrencyDecimalSeparator=":"; //小数点
mycurrency.CurrencyGroupSeparator="_";  //分隔符
mycurrency.CurrencyGroupSizes=groupsize;
// 输出 #1_234_5_67:89
Console.WriteLine(val.ToString("C",mycurrency));


3.2 格式化日期
输出形式取决于用户计算机的文化设置。
using System;
using System.Globalization; 
public class MainClass 

  public static void Main(string[] args)  
  {
        DateTime dt = DateTime.Now;
        String[] format = {"d","D","f","F","g","G","m","r","s","t", "T","u", "U","y","dddd, MMMM dd yyyy","ddd, MMM d \"'\"yy","dddd, MMMM dd","M/yy","dd-MM-yy",};
        String date;
      for (int i = 0; i < format.Length; i++) 
      {
         date = dt.ToString(format, DateTimeFormatInfo.InvariantInfo);
         Console.WriteLine(String.Concat(format, " :" , date));
      }
     }
}
d :07/11/2004    <=======输出
D :Sunday, 11 July 2004
f :Sunday, 11 July 2004 10:52
F :Sunday, 11 July 2004 10:52:36
g :07/11/2004 10:52
G :07/11/2004 10:52:36
m :July 11
r :Sun, 11 Jul 2004 10:52:36 GMT
s :2004-07-11T10:52:36
t :10:52
T :10:52:36
u :2004-07-11 10:52:36Z
U :Sunday, 11 July 2004 02:52:36
y :2004 July
dddd, MMMM dd yyyy :Sunday, July 11 2004
ddd, MMM d "'"yy :Sun, Jul 11 '04
dddd, MMMM dd :Sunday, July 11
M/yy :7/04
dd-MM-yy :11-07-04

3.3 格式化枚举
enum classmen
{
  ynn=1,
  yly=2,
  css=3,
  C++=4
}
获取枚举字符串信息如下:
classmen myclassmen=classmen.yly;
Console.WriteLine(myclassmen.ToString( ));   //displays yly
Console.WriteLine(myclassmen.ToString("d")); //displays 2
从系统枚举中获取文本人信息如下:
DayOfWeek day=DayOfWeek.Friday;
//displays "Day is Friday"
Console.WriteLine(String.Format("Day is {0:G}",day));
格式化字符串“ G ”把枚举显示为一个字符串。


================================================================

 

汇总c#.net常用函数和方法集
1、DateTime 数字型 
System.DateTime currentTime=new System.DateTime(); 
1.1 取当前年月日时分秒 
currentTime=System.DateTime.Now; 
1.2 取当前年 
int 年=currentTime.Year; 
1.3 取当前月 
int 月=currentTime.Month; 
1.4 取当前日 
int 日=currentTime.Day; 
1.5 取当前时 
int 时=currentTime.Hour; 
1.6 取当前分 
int 分=currentTime.Minute; 
1.7 取当前秒 
int 秒=currentTime.Second; 
1.8 取当前毫秒 
int 毫秒=currentTime.Millisecond; 
(变量可用中文)

1.9 取中文日期显示——年月日时分 
string strY=currentTime.ToString("f"); //不显示秒

1.10 取中文日期显示_年月 
string strYM=currentTime.ToString("y");

1.11 取中文日期显示_月日 
string strMD=currentTime.ToString("m");

1.12 取中文年月日 
string strYMD=currentTime.ToString("D");

1.13 取当前时分,格式为:14:24 
string strT=currentTime.ToString("t");

1.14 取当前时间,格式为:2003-09-23T14:46:48 
string strT=currentTime.ToString("s");

1.15 取当前时间,格式为:2003-09-23 14:48:30Z 
string strT=currentTime.ToString("u");

1.16 取当前时间,格式为:2003-09-23 14:48 
string strT=currentTime.ToString("g");

1.17 取当前时间,格式为:Tue, 23 Sep 2003 14:52:40 GMT 
string strT=currentTime.ToString("r");

1.18获得当前时间 n 天后的日期时间 
DateTime newDay = DateTime.Now.AddDays(100);

2、Int32.Parse(变量) Int32.Parse("常量") 
字符型转换 转为32位数字型

3、 变量.ToString() 
字符型转换 转为字符串 
12345.ToString("n"); //生成 12,345.00 
12345.ToString("C"); //生成 ¥12,345.00 
12345.ToString("e"); //生成 1.234500e+004 
12345.ToString("f4"); //生成 12345.0000 
12345.ToString("x"); //生成 3039 (16进制) 
12345.ToString("p"); //生成 1,234,500.00%


4、变量.Length 数字型 
取字串长度: 
如: string str="中国"; 
int Len = str.Length ; //Len是自定义变量, str是求测的字串的变量名

5、System.Text.Encoding.Default.GetBytes(变量) 
字码转换 转为比特码 
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str); 
然后可得到比特长度: 
len = bytStr.Length;

6、System.Text.StringBuilder("") 
字符串相加,(+号是不是也一样?) 
如:System.Text.StringBuilder sb = new System.Text.StringBuilder(""); 
sb.Append("中华"); 
sb.Append("人民"); 
sb.Append("共和国");

7、变量.Substring(参数1,参数2); 
截取字串的一部分,参数1为左起始位数,参数2为截取几位。 
如:string s1 = str.Substring(0,2);

8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString(); 
取远程用户IP地址

9、穿过代理服务器取远程用户真实IP地址: 
if(Request.ServerVariables["HTTP_VIA"]!=null){ 
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); 
}else{ 
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString(); 
}

10、 Session["变量"]; 
存取Session值; 
如,赋值: Session["username"]="小布什";

取值: Object objName=Session["username"]; 
String strName=objName.ToString(); 
清空: Session.RemoveAll();

11、String str=Request.QueryString["变量"]; 
用超链接传送变量。 
如在任一页中建超链接:<a href=Edit.aspx?fbid=23>点击</a> 
在Edit.aspx页中取值:String str=Request.QueryString["fdid"];

12、DOC对象.CreateElement("新建节点名"); 
创建XML文档新节点

13、父节点.AppendChild(子节点); 
将新建的子节点加到XML文档父节点下

14、 父节点.RemoveChild(节点); 
删除节点

15、Response 
Response.Write("字串"); 
Response.Write(变量); 
向页面输出。

Response.Redirect("URL地址"); 
跳转到URL指定的页面

16、char.IsWhiteSpce(字串变量,位数)——逻辑型 
查指定位置是否空字符; 
如: 
string str="中国 人民"; 
Response.Write(char.IsWhiteSpace(str,2)); //结果为:True, 第一个字符是0位,2是第三个字符。

17、char.IsPunctuation(''字符'') –逻辑型 
查字符是否是标点符号 
如:Response.Write(char.IsPunctuation(''A'')); //返回:False

18、(int)''字符'' 
把字符转为数字,查代码点,注意是单引号。 
如: 
Response.Write((int)''中''); //结果为中字的代码:20013

19、(char)代码 
把数字转为字符,查代码代表的字符。 
如: 
Response.Write((char)22269); //返回“国”字。

20、 Trim() 
清除字串前后空格

21 、字串变量.Replace("子字串","替换为") 
字串替换 
如: 
string str="中国"; 
str=str.Replace("国","央"); //将国字换为央字 
Response.Write(str); //输出结果为“中央”

再如:(这个非常实用)

string str="这是<script>脚本"; 
str=str.Replace("<","<font><</font>"); //将左尖括号替换为<font> 与 < 与 </font> (或换为<,但估计经XML存诸后,再提出仍会还原) 
Response.Write(str); //显示为:“这是<script>脚本”

如果不替换,<script>将不显示,如果是一段脚本,将运行;而替换后,脚本将不运行。 
这段代码的价值在于:你可以让一个文本中的所有HTML标签失效,全部显示出来,保护你的具有交互性的站点。 
具体实现:将你的表单提交按钮脚本加上下面代码: 
string strSubmit=label1.Text; //label1是你让用户提交数据的控件ID。 
strSubmit=strSubmit.Replace("<","<font><</font>"); 
然后保存或输出strSubmit。 
用此方法还可以简单实现UBB代码。

22、Math.Max(i,j) 
取i与j中的最大值 
如 int x=Math.Max(5,10); // x将取值 10

23、字串对比一般都用: if(str1==str2){ } , 但还有别的方法:

(1)、 
string str1; str2 
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如: 
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); }

(2)、 
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

(3)、 
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

24、IndexOf() 、LastIndexOf() 
查找字串中指定字符或字串首次(最后一次)出现的位置,返回索引值,如: 
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置) 
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置) 
str1.IndexOf("字串",3,2);//从str1第4个字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置)

25、Insert() 
在字串中指定索引位插入指定字符。如: 
str1.Insert(1,"字");在str1的第二个字符处插入“字”,如果str1="中国",插入后为“中字国”;

26、PadLeft()、PadRight() 
在字串左(或右)加空格或指定char字符,使字串达到指定长度,如: 
<% 
string str1="中国人"; 
str1=str1.PadLeft(10,''1''); //无第二参数为加空格 
Response.Write(str1); //结果为“1111111中国人” , 字串长为10 
%>

27、Remove() 
从指定位置开始删除指定数的字符 
<% 
string str1="我是***的崇拜者之一"; 
Response.Write(str1.Remove(5,4)); //结果为“我是***之一” 
%>

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平