顯示具有 C# 標籤的文章。 顯示所有文章
顯示具有 C# 標籤的文章。 顯示所有文章

2014年1月11日 星期六

ASP.NET C# 字串處理 - 3(數值)

1.判斷是否為數值 TryParse

  • 若要檢查輸入的資料是否為數值,可呼叫數值型別的TryParse()方法檢查資料內容是否為數值。符合回傳True,只要出現數字以外的則回傳False
範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string s1 = "三百";
            string s2 = "1000";
            string s3 = "2,000";
            string s4 = "-3000";
            string s5 = "4000d";
            int currentValue = 0;
            Response.Write(int.TryParse(s2,out currentValue)+"-"+currentValue+" ; ");
            Response.Write(int.TryParse(s3,out currentValue)+"-"+currentValue+" ; ");
            Response.Write(int.TryParse(s4,out currentValue)+"-"+currentValue+" ; ");
            Response.Write(int.TryParse(s5,out currentValue)+"-"+currentValue+" ; ");
        }
    }

結果:
True-1000 ; False-0 ; True--3000 ; False-0 ;

2.數值的格式化 decimal

  • 幾乎每個物件都會提供ToString()方法,用來將物件內容轉換成字串表示
  • 如果要將數字實數常值當成decimal處理,請使用後至字元m或M,例如
    decimal d = 12345.67M;
    如果沒有後置字元M,數字會被視為double處理,因而產生錯誤
  • 整數常值來初始化字元則不需要M,例如
    decimal d = 1234567;
數值格式名稱
範例
例子
G或g
123456.789
123456.789為例
C或c
NT$123456.789
123456.789為例
G或g
123456.789
123456.789為例
F或f
123456.79
123456.789為例
N或n
123,456.789
123456.789為例
P或p
24.13%
0.24125為例
E或e
1234568E+005
0.24125為例
X
7B
123為例
x
7b
123為例

3.資料型別轉換 Convert.

ToBoolean
轉換為bool型別
ToByte
轉換為byte型別
ToChar
轉換為Char型別
ToDateTime
轉換為DateTime型別
ToDouble
轉換為double型別
ToDecimal
轉換為decimal型別
ToInt32
轉換為int型別
ToInt64
轉換為long型別
ToInt16
轉換為Short型別
ToString
轉換為String型別

  • 隱含式資料型別轉換
    數值在不同變數之間傳遞時,需要從某種形別轉換成另一種型別來處理,例:
    int a = 123;
    long b = a;
  • 明確式資料型別轉換
    當資料從較大的資料型別轉換成較小的變數中使用,可能會造成資料損失,會產生錯誤
    例:
    int a = 12;
    byte b = (byte) a;


  • 建議使用資料轉換時,盡可能使用明確式資料轉換

2014年1月9日 星期四

C#日期格式化列表

使用函式 DateTime dt = DateTime.Now;

DateTime 格式轉換方法

方法
結果
dt.ToString();2005-11-5 13:21:25
dt.ToFileTime().ToString();127756416859912816
dt.ToFileTimeUtc().ToString();127756704859912816
dt.ToLocalTime().ToString();2005-11-5 21:21:25
dt.ToLongDateString().ToString();2005年11月5日
dt.ToLongTimeString().ToString();13:21:25
dt.ToOADate().ToString();38661.5565508218
dt.ToShortDateString().ToString();2005-11-5
dt.ToShortTimeString().ToString();//13:21
dt.ToUniversalTime().ToString();//2005-11-5 5:21:25
dt.Year.ToString();//2005
dt.Date.ToString();//2005-11-5 0:00:00
t.DayOfWeek.ToString();dSaturday
dt.DayOfYear.ToString();309
dt.Hour.ToString();13
dt.Millisecond.ToString();441
dt.Minute.ToString();30
dt.Month.ToString();11
dt.Second.ToString();28
dt.Ticks.ToString();632667942284412864
dt.TimeOfDay.ToString();13:30:28.4412864
dt.ToString();2005-11-5 13:47:04
dt.AddYears(1).ToString();2006-11-5 13:47:04
dt.AddDays(1.1).ToString();2005-11-6 16:11:04
dt.AddHours(1.1).ToString();2005-11-5 14:53:04
dt.AddMilliseconds(1.1).ToString();2005-11-5 13:47:04
dt.AddMonths(1).ToString();2005-12-5 13:47:04
dt.AddSeconds(1.1).ToString();2005-11-5 13:47:05
dt.AddMinutes(1.1).ToString();2005-11-5 13:48:10
dt.AddTicks(1000).ToString();2005-11-5 13:47:04
dt.CompareTo(dt).ToString();0
dt.Add(?).ToString();問號為一個時間段
dt.Equals("2005-11-6 16:11:04").ToString();False
dt.Equals(dt).ToString();True
dt.GetHashCode().ToString();1474088234
dt.GetType().ToString();System.DateTime
dt.GetTypeCode().ToString();DateTime
dt.GetDateTimeFormats('s')[0].ToString();2005-11-05T14:06:25
dt.GetDateTimeFormats('t')[0].ToString();14:06
dt.GetDateTimeFormats('y')[0].ToString();2005年11月
dt.GetDateTimeFormats('D')[0].ToString();2005年11月5日
dt.GetDateTimeFormats('D')[1].ToString();2005 11 05
dt.GetDateTimeFormats('D')[2].ToString();星期六 2005 11 05
dt.GetDateTimeFormats('D')[3].ToString();星期六 2005年11月5日
dt.GetDateTimeFormats('M')[0].ToString();11月5日
dt.GetDateTimeFormats('f')[0].ToString();2005年11月5日 14:06
dt.GetDateTimeFormats('g')[0].ToString();2005-11-5 14:06
dt.GetDateTimeFormats('r')[0].ToString();Sat, 05 Nov 2005 14:06:25 GMT

String.Format 日期格式化方法

string.Format("{0:d}",dt);//2005-11-5
string.Format("{0:D}",dt);//2005年11月5日
string.Format("{0:f}",dt);//2005年11月5日 14:23
string.Format("{0:F}",dt);//2005年11月5日 14:23:23
string.Format("{0:g}",dt);//2005-11-5 14:23
string.Format("{0:G}",dt);//2005-11-5 14:23:23
string.Format("{0:M}",dt);//11月5日
string.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT
string.Format("{0:s}",dt);//2005-11-05T14:23:23
string.Format("{0:t}",dt);//14:23
string.Format("{0:T}",dt);//14:23:23
string.Format("{0:u}",dt);//2005-11-05 14:23:23Z
string.Format("{0:U}",dt);//2005年11月5日 6:23:23
string.Format("{0:Y}",dt);//2005年11月
string.Format("{0}",dt);//2005-11-5 14:23:23
string.Format("{0:yyyyMMddHHmmssffff}",dt);


其它方法

元年轉換DataTime ('20101025'):
string redate1 = "20101025";
DataTime dt = DateTime.ParseExact(redate1, "yyyyMMdd", Nothing, System.Globalization.DateTimeStyles.AllowWhiteSpaces);

日期比較:
if (DateTime.Compare(date1, date2) > 0) {
    date1 > date2 
} else {
    date1 < date2
}

計算2個日期之間的天數差:
DateTime dt1 = Convert.DateTime("2007-8-1");  
DateTime dt2 = Convert.DateTime("2007-8-15"); 
TimeSpan span = dt2.Subtract(dt1);            
int dayDiff = span.Days + 1;                  

計算某年某月的天數:
int days = DateTime.DaysInMonth(2007, 8);     
days = 31;                                    

給日期增加一天、減少一天:
DateTime dt =DateTime.Now;
dt.AddDays(1); //增加一天
dt.AddDays(-1);//減少一天
其它年份方法類似...

Oracle SQL裡轉換日期函數:
to_date("2007-6-6",'YYYY-MM-DD");
to_date("2007/6/6",'yyyy/mm/dd");

2014年1月6日 星期一

ASP.NET C# 字串處理 - 2(日期時間)

1.現在的日期、時間 DateTime

  • 在C#中可以透過DateTime物件的Now及Today屬性回傳
範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now);
            Response.Write(DateTime.Today);
        }
結果:
2014/1/7 上午 01:37:37
2014/1/7 上午 12:00:00 

2.傳回年、月、日、時、分、秒

  • 在C#中設定一個DateTime變數內容可以將年、月、日、時、分、秒當作參數帶入設定
例:DateTime dt = new DateTime(2008, 1, 1, 18, 30, 30);
  • .NET也將所有的日期時間視為物件,年、月、日、時、分、秒則是日期本身的一部分,因此只要用Year , Month , Day , Hour , Minute , Second屬性,便可知道日期時間的年、月、日、時、分、秒
範例:
    
        protected void Page_Load(object sender, EventArgs e)
        {
            DateTime dt = new DateTime(2008,1,1,18,30,30);
            Response.Write(dt.Year + " ; ");
            Response.Write(dt.Month + " ; ");
            Response.Write(dt.Day + " ; ");
            Response.Write(dt.Hour + " ; ");
            Response.Write(dt.Minute + " ; ");
            Response.Write(dt.Second + " ; ");
        }
結果:
2008 ; 1 ; 1 ; 18 ; 30 ; 30 ;

3.今天星期幾? DayOfWeek

  • 檢查日期時間的DayOfWeek屬性可以告訴你今天星期幾:
範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.DayOfWeek);
        }
    }
結果:
Wednesday

  • Response.Write(DateTime.Now.DayOfWeek.GetHashCode());則是回傳數字,星期二就是2,星期日則是0

4.判斷是否為日期時間? DateTime.TryParse

  • DateIme的TryParse()方法可以協助判斷資料是否為正確的日期格式及可能的日期。也可以檢查時間,使用DateTime的TryParse()方法第一個參數傳入預判斷的日期時間,第二個參數一個日期物件,已取得判斷所得結果。
    
        protected void Page_Load(object sender, EventArgs e)
        {
            DateTime dt;
            Response.Write(DateTime.TryParse("mar 12,2008", out dt)+" , "+dt);
        }
結果:
True , 2008/3/12 上午 12:00:00

5.日期時間的格式化? 

  • 對一個日期時間直接呼叫其ToString()方法會顯示完整的日期時間:
    Response.Write(DateTime.Now.ToString());
  • 若只想取出日期貨時間的部分,並且以簡短或完整的日期時間格式顯示,則可在呼叫ToString()方法時,指定預先定義的日期與時間隔式名稱:
範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString("d")+" , ");
            Response.Write(DateTime.Now.ToString("D") + " , ");
            Response.Write(DateTime.Now.ToString("t") + " , ");
            Response.Write(DateTime.Now.ToString("T") + " , ");
        }
    }
結果:
2014/1/9 , 2014年1月9日 , 下午 11:15 , 下午 11:15:20 ,

  • Response.Write(DateTime.Now.ToString("yy-MM-dd"));//14-01-09
  • 若上一行程式MM改為小寫的mm,此時mm代屌的是分鐘數而非月份
    Response.Write(DateTime.Now.ToString("yy-mm-dd"));//14-55-09        //14年55分09日
  • 若是使用一個格式字元,像是h,m,s,y,d,M必須在字元前面加上%
    Response.Write(DateTime.Now.ToString("%h"));//11      //假設現在11點
  • 單獨自元要在前面加上%字元的真正原因:與.NET預先定義的日期時間格式名稱有所區別
    Response.Write(DateTime.Now.ToString("%M"));// 1
    Response.Write(DateTime.Now.ToString("M"));//1月09日

6.日期時間的加減 

  • 日期相加可以使用AddDays()、AddMonths()、AddHours()
範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString());
            Response.Write(" ; ");
            Response.Write(DateTime.Now.AddDays(5).ToString());
            Response.Write(" ; ");
            Response.Write(DateTime.Now.AddDays(-5).ToString());
        }
    }
結果:
2014/1/10 上午 12:14:49 ; 2014/1/15 上午 12:14:49 ; 2014/1/5 上午 12:14:49
  • 傳入正數為相加,傳入負數為相減

兩個日期時間的差距  Subtract()、TimeSpan

範例:
    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            DateTime dt = new DateTime(2014, 11, 17);
            TimeSpan ts = dt.Subtract(DateTime.Now);
            Response.Write("現在距離我生日還有:" + ts.Days.ToString() + "天 ; ");
            Response.Write("現在距離我生日還有:" + ts.TotalHours.ToString() + "小時 ; ");
            Response.Write("現在距離我生日還有:" + ts.TotalMinutes.ToString() + "分鐘 ; ");
            Response.Write("現在距離我生日還有:" + ts.TotalSeconds.ToString() + "秒");
        }
    }
結果:
現在距離我生日還有:310天 ; 現在距離我生日還有:7463.53980021022小時 ; 現在距離我生日還有:447812.388012613分鐘 ; 現在距離我生日還有:26868743.2807568秒 

2014年1月4日 星期六

ASP.NET C# 字串處理


1.串連兩個字串

範例:
    
public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string s1 = "This is : ";
            string s2 = "ASP.NET";
            Response.Write(s1 + s2);
        }
    }

結果:
This is : ASP.NET


2.大小寫轉換 ToUpper()(大寫)、ToLower()(小寫)

範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            string bookName = "Visual C# for ASP.NET";
            Response.Write(bookName.ToUpper());
            Response.Write(bookName.ToLower());
        }
結果:
VISUAL C# FOR ASP.NET
visual c# for asp.net 



3.去除前後空白 Trim()

範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string bookName = "    Visual C# for ASP.NET     ";
            Response.Write("["+bookName.Trim()+"]");
        }
    }
結果:
[Visual C# for ASP.NET] 
註:
Trim()只可以去除前後空字串,不可去除Visual C# for ASP.NET中的空白字元,如需要去除字串中的空字元須使用Replace()
若只想去除字串前的空白字串可使用TrimStart()
若只想去除字串前的空白字串可使用TrimEnd()



4.字串長度 Length.ToString()

範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string bookName = "Visual C# for ASP.NET";
            Response.Write("字串長度 : "+bookName.Length.ToString());
        }
    }
結果:
字串長度 : 21


5.取出部分字串 Substring()

範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string question = "Do you like ASP.NET";
            Response.Write(question.Substring(12));
        }
    }
結果:
ASP.NET?
註:
Substring()的第一個數字指定要從哪個字開始取出到最後一個字元,
以上面範例為從第13個字元取到最後一個字元,第一個位置為0。

如果要取出字串中區間字元的話則使用Substring(12,7)
則取出第13個字元到後面7個
範例:
    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string question = "Do you like ASP.NET?";
            Response.Write(question.Substring(12,7));
        }
    }
結果:
ASP.NET


6.判斷某個字出現的位置  IndexOf()

範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string companyName = "ASPNET Company";
            Response.Write("字母A出線的位置"+companyName.IndexOf("A"));
        }
    }
結果:
字母A出現的位置0 

註:
IndexOf()方法是會分大小寫的,因此把A換成a的話

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string companyName = "ASPNET Company";
            Response.Write("字母a出現的位置"+companyName.IndexOf("a"));
        }
    }
結果:
字母a出現的位置11

 若要IndexOf()不區分大小寫的話需使用CurrentCultureIgnoreCase

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string companyName = "ASPNET Company";
            Response.Write("字母a(不區分大小寫)出現的位置"+companyName.IndexOf("a",StringComparison.CurrentCultureIgnoreCase));
        }
    }

結果:
字母a(不區分大小寫)出現的位置0 


StringComparison.CurrentCultureIgnoreCase就是不區分大小寫


    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string companyName = "ASPNET Company";
            Response.Write("字母A出現的位置"+companyName.IndexOf("A"));

            Response.Write("字母A出現的位置" + companyName.IndexOf("A",7));
        }
    }

結果:
字母A出現的位置0字母A出現的位置-1
註:
若IndexOf("A",7)則是從第8個字母開始找,如沒有找到則回傳-1

7.取代字串的內容  Replace()

範例:
    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string companyName = "ASPNET Company";
            Response.Write(companyName.Replace("ASPNET","JAVA"));
        }
    }

結果:
JAVA Company

  • 使用Replace()可去除字串中所有的空白,以下為將空白替換成空字串,以達到空白的效果


    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string s = "Visual    C#";
            Response.Write(s.Replace(" ", ""));
        }
    }
結果:
VisualC#

8.將字串分割成字串陣列  Split()


  • 字串EmpName裡放一堆英文名字,每個英文名字間都以逗號分隔。透過字串變數本身的Split(),將字串EmpName依逗號(',')進行切割。

範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string EmpName = "Adams,Richard,Jerry,Sophie";
            string[] EmpArray = EmpName.Split(new char[]{','});
            Response.Write("陣列長度:"+EmpArray.Length.ToString());
            Response.Write(" ; ");
            Response.Write("第一個名字是:" + EmpArray[0]);
        }
    }
結果:
陣列長度:4 ; 第一個名字是:Adams

  • 取出最後一個單字,須先判斷最後一個索引值為多少
範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            string EmpName = "Adams,Richard,Jerry,Sophie";
            string[] EmpArray = EmpName.Split(new char[]{','});
            Response.Write("陣列長度:"+EmpArray.Length.ToString());
            Response.Write(" ; ");
            Response.Write("最後一個名字是:" + EmpArray[EmpArray.Length-1]);
        }
結果:
陣列長度:4 ; 第一個名字是:Sophie

  • 將陣列轉換成字串則使用String.Join()方法
範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            string[] EmpNames = {"Adams","Richard","Jerry","Sophie"};
            string Employees = string.Join(";", EmpNames);
            Response.Write(Employees);
        }
結果:
Adams;Richard;Jerry;Sophie

9.字串的格式化  

  • 以下面這段程式為例,最後若要將 i , j , total變數與一些字串混合顯示,Response.Write()時要穿插許多+運算子:
範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            int i = 10;
            int j = 20;
            int total = i + j;
            Response.Write(i.ToString() + "+" + j.ToString() + "運算結果為:" + total.ToString());
        }
    }
結果:
10+20運算結果為:30 

  • 這樣寫並沒有錯,但是Response.Write納行很亂,要變更顯示方法時得想一下才知道如何改。
  • String本身有提供一個Format()方法,他可以將多個變數格式化成指定的方法呈現。
範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            int i = 10;
            int j = 20;
            int total = i + j;
            String s = String.Format("{0}+{1}運算結果為:{2}", i, j, total);
            Response.Write(s);
        }
結果:
10+20運算結果為:30 

  • 除了固定的字元外,還可看到用一些大括號括起來的數字,像是{0} , {1} , {2},這些就代表變數要出現的位置,例:{0}就是變數 i 。