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)); //結果爲“我是***之一”
%>

 

轉自:http://www.cnblogs.com/davidlc/archive/2008/06/11/1217226.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章