2008年3月19日 星期三
yyyyMMdd / yyyymmdd / HH / hh
yyyyMMdd → 20080319
yyyymmdd → 2008319
HH → 24小時
hh → 12小時
yyyyMMdd / yyyymmdd / HH / hh
yyyymmdd → 2008319
HH → 24小時
hh → 12小時
yyyyMMdd / yyyymmdd / HH / hh
2008年3月18日 星期二
什麼是Cluster server
叢集式架構 / Clustering 叢集, 將數台電腦連結成為邏輯上的一台電腦, 目的是可平衡負載 (LOAD BLANCING) 或作為平行處理 (PARALLEL PROCESSING) 來提昇執行效能, 在某一台電腦發生問題時其他電腦能自動接手以達成錯誤容忍 (FAULT TOLERANCE). 圖示由於近年來微處理器及網路相關技術的長足進步,使得採用這些標準配備來建構平行計算平台的 可行性大為提高,且具有價格低廉,元件取得容易,維護容易等優點。國外已有許多單位著手進 行相關的研究,稱之為Clustering technology(叢集技術)。 [解說] 要建構 Scalable (對漸增的負載, 性能降低較慢, 資源較慢達到飽合) & Available (具容錯性) 的大型分散式系統, 理想的結構必需具有對稱性以及某種程度的自主性. Clustering 就是用來近似 Symmetry & Autonomy 組態的方法. 系統分割為一群半自 主性的 Cluster. 一個 Cluster 由一群機器以及其專用的 Cluster Server 組成, 用到其它 Cluster 資源的機會並不大. 在大部份的時間內, 每個機器的要求都能被 其 Cluster Server 所滿足. Clustering 對 Client 來說就像是一部單一的 Server. 這種方法的成效要看如何配置各個單位以及區域資源. 如果 Cluster 能夠取得相當 的平衡 (Server 能夠滿足所有 Cluster 的要求), 便可視為一模組不斷擴大系統規 模而不容易產生瓶頸.
Server架構成cluster 所以叫做Cluster Server
這個技術如果想試試看 可以去微軟的MSDN下載
跟硬體無關
Server架構成cluster 所以叫做Cluster Server
這個技術如果想試試看 可以去微軟的MSDN下載
跟硬體無關
2008年3月12日 星期三
自動產生編號 DATAGRID
private void dg_Data_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemIndex!=-1)
{
e.Item.Cells[0].Text=(this.dg_Data.CurrentPageIndex*this.dg_Data.PageSize+e.Item.ItemIndex+1).ToString();
}
}
{
if(e.Item.ItemIndex!=-1)
{
e.Item.Cells[0].Text=(this.dg_Data.CurrentPageIndex*this.dg_Data.PageSize+e.Item.ItemIndex+1).ToString();
}
}
2008年3月7日 星期五
VB.NET 與 C# 語言轉換器
語言轉換器(VB.NET, C# Language Converter):
Free Code Translation for .NET (C#<->VB.NET)
http://www.carlosag.net/Tools/CodeTranslator/Default.aspx
Convert C# to VB.NET - A free code conversion tool from Developer Fusion
http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx
Convert VB.NET to C# - A free code conversion tool from Developer Fusion
http://labs.developerfusion.co.uk/convert/vb-to-csharp.aspx
Free Code Translation for .NET (C#<->VB.NET)
http://www.carlosag.net/Tools/CodeTranslator/Default.aspx
Convert C# to VB.NET - A free code conversion tool from Developer Fusion
http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx
Convert VB.NET to C# - A free code conversion tool from Developer Fusion
http://labs.developerfusion.co.uk/convert/vb-to-csharp.aspx
2008年3月6日 星期四
NTLDR is missing
NTLDR is missing開機錯誤修復
選擇光碟開機,由XP安裝片進入到修復控制台執行以下三個步驟:
(e代表光碟機,c代表作業系統槽)
1.copy e:\i386\ntldr c:\
2.copy e:\i386\ntdetect.com c:\
3.copy e:\i386\bootfont.bin c:\
此時已經可以進入作業系統。
如需進一步建立Boot.ini開機檔請見以下網頁:
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-tw%3B289022
http://hk.geocities.com/alanhkg88/DOSIndex.html
選擇光碟開機,由XP安裝片進入到修復控制台執行以下三個步驟:
(e代表光碟機,c代表作業系統槽)
1.copy e:\i386\ntldr c:\
2.copy e:\i386\ntdetect.com c:\
3.copy e:\i386\bootfont.bin c:\
此時已經可以進入作業系統。
如需進一步建立Boot.ini開機檔請見以下網頁:
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-tw%3B289022
http://hk.geocities.com/alanhkg88/DOSIndex.html
Windows系統四種神奇的開機方法
方法一:設定定時開機
主板上有即時時鐘(Real Time Clock,RTC)負責系統的計時,我們可以通過RTC指定開機的時間,就像鬧鐘一樣。不過,由於這項功能很少被人使用,部分雖然提供了此功能的主板(如INTEL原裝主板)其實並不能在指定時間開機,所以用戶在正式使用前最好先進行測試。
具體操作方式為:
1、電腦開機之後根據螢幕上的提示資訊按“Del”鍵進入主板BIOS設定畫面,與定時開機有關的設定功能一般放在“Power Management Setup”選項下。
2、在BIOS中有一項“RTC Alarm Poweron”的選項,應設成“Enabled”(啟用)。之後用戶可以具體設好定時開機的日期、小時、分鐘、秒鐘。
3、為了保證電腦準確無誤地實現定時自動開機的功能,用戶還要先檢查一下主板BIOS中的系統時間是否與現實時間相同。
4、最後一步要記得將主板BIOS中的設定修改結果進行保存,即可在預設的時間定時開機。某些主板上還能夠設成每日同一時間從BIOS自動開機,方法是將“RTC Alarm Date”一項改為“Every Day”。
不過要提示大家一點,如果利用BIOS自動開機的話,用戶的Windows作業系統中只能使用一個帳戶,否則不可能實現自動開機再自動登錄Windows.
如果有人問你,你的電腦怎麼開機?回答不外乎是:“直接按電腦機箱上的電源開關按鈕不就得了”。這當然是最簡單的方法。不過,其實打開電腦還有許多方法,下面筆者就給大家介紹四種神奇的電腦開機方法。
方法二:利用鍵盤/滑鼠開機
如果電腦機箱放置在難以觸及的地方,使用鍵盤/滑鼠開機是一個不錯的方案。但要注意的是此功能只支援以PS/2介面連接的鍵盤和滑鼠,使用USB介面連接則不行。啟用主板BIOS中“Power On By PS/2 Keyboard”的選項,就可以選擇不同的開機熱鍵,如Ctrl+E是最常見的開機熱鍵。
或者選“Power Key”一項後,可用鍵盤上單獨設計的一個電源鍵開機,但前提是只有部分符合Keyboard 98技術規格的鍵盤才支援此功能。當然,機箱上的電源按鈕仍然能夠使用。至於用滑鼠開機也很簡單,在BIOS中的設定選項與鍵盤開機設定類似,然後只須輕點滑鼠按鈕就能啟動電腦。
方法三:利用網路喚醒開機
要使用Wake On LAN (WOL)網路喚醒功能,需要網卡支援,而具備WOL功能的網卡都有一條特殊的信號線連接主板上的WOL介面,負責將開機信號傳送至主板。不過,目前具備WOL介面的主板已經不多,廠商改為在主板內置的網路晶片上提供WOL功能。
WOL的原理是電腦在開機時或S5休眠模式(Suspend to Disk,休眠到硬碟)下,網卡仍以極低電壓維持基本運作,這時在網路上的其他電腦便可通過軟體傳送一個稱為“Magic Packet”的神奇封包至要喚醒的電腦。網卡接收信號後就會發出開機信號至主板,使主板啟動。由於電腦在喚醒前仍處於開機狀態,因此我們要知道網卡的MAC位址(每張網卡均有自己獨特的MAC位址,軟體以此進行識別)。
網路喚醒功能的具體使用方法如下:首先在主板BIOS中打開WOL選項。注意部份主板只支援從S5模式中喚醒(Wake On LAN from S5)。
其次,從網上下載WOL軟體。這個名為“Magic packet”的網路喚醒軟體,其設定和使用方法都很簡單。執行後在其操作介面中只有5個選項。
其中:網卡的“(MAC Address)(MAC位址)”一欄,用戶可在Windows作業系統的命令行模式下輸入“ipconfig/all”的指令來獲得。另外,“Internet Address”(互聯網位址)一欄是要進行廣播的欄目,在此欄及“Subnet Mask”一欄中輸入“255、255、255、255”則可進行本地廣播(Local Broadcast)。第四欄為“Send Options”,應選擇“Local Subnet”。第五欄“Remote Port Number”則隨意輸入。注意,上述設定只針對本地網路(Local LAN)而言。如要經互聯網進行喚醒則涉及更多的問題,在此不作討論。最後單擊介面下方的“Wake Me UP”按鈕即可實現從網路喚醒電腦。
方法四:用電視卡開機
具備自動開機功能的電視卡已經大量面市,將其連接好後,利用電視卡提供的軟體設定開機時間即可。
電視卡的自動開機方式大致可以分為三種方式:第一種是真正具備自動開機功能的產品,需先將機箱電源線與電視卡連接再轉接出;另一種是利用休眠方式開機的電視卡。其中,第二種方法由於電腦並未真正關機,即仍在消耗電力,所以並不是所有用戶都樂意採用。下面主要介紹第一種自動開機方法的具體操作。
1、首先,用戶在安裝時要將機箱上電腦開關按鈕的引線接腳與電視卡的“Power Switch”接腳相連接。
2、之後再將電視卡的另一組“Power Switch”接腳與主板上的電源接腳連接,最後把電視卡裝進主板的PCI擴展槽中,這樣內部連接就完成了。
3、安裝好硬體後,電視卡的配套軟體(如康博PVR2)也需要進行設定。主要是在“預約錄影設定”功能方面,用戶應勾選“啟用自動開機功能”一項。
4、如果你電腦中的Windows作業系統超過一個用戶使用的話,還要設為“啟用自動登錄”模式,並輸入用戶名稱和密碼,即可完成整個設定步驟。
主板上有即時時鐘(Real Time Clock,RTC)負責系統的計時,我們可以通過RTC指定開機的時間,就像鬧鐘一樣。不過,由於這項功能很少被人使用,部分雖然提供了此功能的主板(如INTEL原裝主板)其實並不能在指定時間開機,所以用戶在正式使用前最好先進行測試。
具體操作方式為:
1、電腦開機之後根據螢幕上的提示資訊按“Del”鍵進入主板BIOS設定畫面,與定時開機有關的設定功能一般放在“Power Management Setup”選項下。
2、在BIOS中有一項“RTC Alarm Poweron”的選項,應設成“Enabled”(啟用)。之後用戶可以具體設好定時開機的日期、小時、分鐘、秒鐘。
3、為了保證電腦準確無誤地實現定時自動開機的功能,用戶還要先檢查一下主板BIOS中的系統時間是否與現實時間相同。
4、最後一步要記得將主板BIOS中的設定修改結果進行保存,即可在預設的時間定時開機。某些主板上還能夠設成每日同一時間從BIOS自動開機,方法是將“RTC Alarm Date”一項改為“Every Day”。
不過要提示大家一點,如果利用BIOS自動開機的話,用戶的Windows作業系統中只能使用一個帳戶,否則不可能實現自動開機再自動登錄Windows.
如果有人問你,你的電腦怎麼開機?回答不外乎是:“直接按電腦機箱上的電源開關按鈕不就得了”。這當然是最簡單的方法。不過,其實打開電腦還有許多方法,下面筆者就給大家介紹四種神奇的電腦開機方法。
方法二:利用鍵盤/滑鼠開機
如果電腦機箱放置在難以觸及的地方,使用鍵盤/滑鼠開機是一個不錯的方案。但要注意的是此功能只支援以PS/2介面連接的鍵盤和滑鼠,使用USB介面連接則不行。啟用主板BIOS中“Power On By PS/2 Keyboard”的選項,就可以選擇不同的開機熱鍵,如Ctrl+E是最常見的開機熱鍵。
或者選“Power Key”一項後,可用鍵盤上單獨設計的一個電源鍵開機,但前提是只有部分符合Keyboard 98技術規格的鍵盤才支援此功能。當然,機箱上的電源按鈕仍然能夠使用。至於用滑鼠開機也很簡單,在BIOS中的設定選項與鍵盤開機設定類似,然後只須輕點滑鼠按鈕就能啟動電腦。
方法三:利用網路喚醒開機
要使用Wake On LAN (WOL)網路喚醒功能,需要網卡支援,而具備WOL功能的網卡都有一條特殊的信號線連接主板上的WOL介面,負責將開機信號傳送至主板。不過,目前具備WOL介面的主板已經不多,廠商改為在主板內置的網路晶片上提供WOL功能。
WOL的原理是電腦在開機時或S5休眠模式(Suspend to Disk,休眠到硬碟)下,網卡仍以極低電壓維持基本運作,這時在網路上的其他電腦便可通過軟體傳送一個稱為“Magic Packet”的神奇封包至要喚醒的電腦。網卡接收信號後就會發出開機信號至主板,使主板啟動。由於電腦在喚醒前仍處於開機狀態,因此我們要知道網卡的MAC位址(每張網卡均有自己獨特的MAC位址,軟體以此進行識別)。
網路喚醒功能的具體使用方法如下:首先在主板BIOS中打開WOL選項。注意部份主板只支援從S5模式中喚醒(Wake On LAN from S5)。
其次,從網上下載WOL軟體。這個名為“Magic packet”的網路喚醒軟體,其設定和使用方法都很簡單。執行後在其操作介面中只有5個選項。
其中:網卡的“(MAC Address)(MAC位址)”一欄,用戶可在Windows作業系統的命令行模式下輸入“ipconfig/all”的指令來獲得。另外,“Internet Address”(互聯網位址)一欄是要進行廣播的欄目,在此欄及“Subnet Mask”一欄中輸入“255、255、255、255”則可進行本地廣播(Local Broadcast)。第四欄為“Send Options”,應選擇“Local Subnet”。第五欄“Remote Port Number”則隨意輸入。注意,上述設定只針對本地網路(Local LAN)而言。如要經互聯網進行喚醒則涉及更多的問題,在此不作討論。最後單擊介面下方的“Wake Me UP”按鈕即可實現從網路喚醒電腦。
方法四:用電視卡開機
具備自動開機功能的電視卡已經大量面市,將其連接好後,利用電視卡提供的軟體設定開機時間即可。
電視卡的自動開機方式大致可以分為三種方式:第一種是真正具備自動開機功能的產品,需先將機箱電源線與電視卡連接再轉接出;另一種是利用休眠方式開機的電視卡。其中,第二種方法由於電腦並未真正關機,即仍在消耗電力,所以並不是所有用戶都樂意採用。下面主要介紹第一種自動開機方法的具體操作。
1、首先,用戶在安裝時要將機箱上電腦開關按鈕的引線接腳與電視卡的“Power Switch”接腳相連接。
2、之後再將電視卡的另一組“Power Switch”接腳與主板上的電源接腳連接,最後把電視卡裝進主板的PCI擴展槽中,這樣內部連接就完成了。
3、安裝好硬體後,電視卡的配套軟體(如康博PVR2)也需要進行設定。主要是在“預約錄影設定”功能方面,用戶應勾選“啟用自動開機功能”一項。
4、如果你電腦中的Windows作業系統超過一個用戶使用的話,還要設為“啟用自動登錄”模式,並輸入用戶名稱和密碼,即可完成整個設定步驟。
可以讓你的右下角顯示日期多一個"星期一"
可以讓你的右下角顯示日期多一個"星期一"
到控制台--地區及語言--自訂--日期--(簡短日期式樣)--輸入 yyyy/M/d/dddd
--再到(完整日期式樣)輸入 yyyy'年'M'月'd'日'/dddd --按套用--確定
到控制台--地區及語言--自訂--日期--(簡短日期式樣)--輸入 yyyy/M/d/dddd
--再到(完整日期式樣)輸入 yyyy'年'M'月'd'日'/dddd --按套用--確定
該記憶體不能...
0X000000該內存該記憶體不能為read或written的解決方案 的解決方法
相信許多人都為「該記憶體不能為read或written」而傷腦筋,大家不妨試用下列命令
重新注冊所有的dll
開始>>執行>. 輸入cmd>> 按「確定」,出現DOS窗口,在命令提示符下輸入
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
如果怕輸入錯誤的話,可以複製這條指令,然後在命令提示框點擊左上角的c:\,貼上便不會輸入錯了。在飛速滾屏完全靜止?先別著急啟動其他軟件程序,先耐心等一會兒,因為此時dll們還在找位置。 需要一至二分鐘的時間注冊,請耐心完成。
P.S.未經測試...
相信許多人都為「該記憶體不能為read或written」而傷腦筋,大家不妨試用下列命令
重新注冊所有的dll
開始>>執行>. 輸入cmd>> 按「確定」,出現DOS窗口,在命令提示符下輸入
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
如果怕輸入錯誤的話,可以複製這條指令,然後在命令提示框點擊左上角的c:\,貼上便不會輸入錯了。在飛速滾屏完全靜止?先別著急啟動其他軟件程序,先耐心等一會兒,因為此時dll們還在找位置。 需要一至二分鐘的時間注冊,請耐心完成。
P.S.未經測試...
2008年3月5日 星期三
2008年3月4日 星期二
C# 輸入西洋日期,取出今年,中國年
///
/// 輸入西洋日期,取出今年,中國年
///
/// 西洋日期
///取出今年,中國年;例如:2004→093
public String getChinaYear(string WestDate)
{
try
{
string dateStr="";
string yyy="00";
int year=int.Parse(WestDate.Substring(0,4))-1911;
yyy= yyy + year.ToString();
dateStr = yyy.Substring(2);
return dateStr;
}
catch(Exception E)
{
return null;
}
}
/// 輸入西洋日期,取出今年,中國年
///
/// 西洋日期
///
public String getChinaYear(string WestDate)
{
try
{
string dateStr="";
string yyy="00";
int year=int.Parse(WestDate.Substring(0,4))-1911;
yyy= yyy + year.ToString();
dateStr = yyy.Substring(2);
return dateStr;
}
catch(Exception E)
{
return null;
}
}
C# 取得今天中國日期
///
/// 取得今天中國日期
///
///今天中國日期
public String getChinaToday()
{
try
{
DateTime dt = DateTime.Now;
int year = dt.Year - 1911;
return year.ToString() + dt.ToString("/MM/dd", DateTimeFormatInfo.InvariantInfo);
}
catch(Exception E)
{
return null;
}
}
/// 取得今天中國日期
///
///
public String getChinaToday()
{
try
{
DateTime dt = DateTime.Now;
int year = dt.Year - 1911;
return year.ToString() + dt.ToString("/MM/dd", DateTimeFormatInfo.InvariantInfo);
}
catch(Exception E)
{
return null;
}
}
C# 民國年轉西元年 (971202 > 1981-12-02)
public static string getParseDate(string dateStr)
{
try
{
if (dateStr == null dateStr.Equals(""))
return "";
return (int.Parse(dateStr.Substring(0, dateStr.Length -4)) + 1911)+"-"+dateStr.Substring(dateStr.Length - 4, 2)+"-"+dateStr.Substring(dateStr.Length - 2, 2);
}
catch
{
return dateStr;
}
}
{
try
{
if (dateStr == null dateStr.Equals(""))
return "";
return (int.Parse(dateStr.Substring(0, dateStr.Length -4)) + 1911)+"-"+dateStr.Substring(dateStr.Length - 4, 2)+"-"+dateStr.Substring(dateStr.Length - 2, 2);
}
catch
{
return dateStr;
}
}
日期轉換
GetTheHoursOfDay(): 某日期的 24 小時時刻列表
GetTheFirstDayOfWeek(): 某日期在該星期的第一天 (星期日)
GetTheLastDayOfWeek(): 某日期在該星期的最後一天 (星期六)
GetTheFirstDayOfMonth(): 某日期在該月份的第一天
GetTheLastDayOfMonth(): 取得某日期在該月份的最後一天
GetTheFirstDaysOfWeekInMoth(): 某日期在該月份每周的第一天列表
GetTheFirstDayOfQuarter(): 某日期在該季的第一天
GetTheLastDayOfQuarter(): 某日期在該季的最後一天
GetTheFirstDaysOfMonthInQuarter(): 取得某日期在該季每個月的第一天列表
GetTheFirstDayOfYear(): 某日期在當年的第一天
GetTheLastDayOfYear(): 某日期在當年的最後一天
GetTheFirstDaysOfQuarterInYear(): 某日期於當年每一季的第一天列表
///
/// 取得某日期的 24 小時時刻列表
///
/// 某日期
///某日期的 24 小時時刻列表
public static DateTime[] GetTheHoursOfDay(DateTime dt)
{
List dtList = new List();
for (int i = 0; i < 24; i++)
{
dtList.Add(new DateTime(dt.Year, dt.Month, dt.Day, i, 0, 0));
}
return dtList.ToArray();
}
///
/// 取得某日期在該星期的第一天 (星期日)
///
/// 某日期
///某日期在該星期的第一天 (星期日)
public static DateTime GetTheFirstDayOfWeek(DateTime dt)
{
return dt.AddDays((int) dt.DayOfWeek*-1).Date;
}
///
/// 取得某日期在該星期的最後一天 (星期六)
///
/// 某日期
///某日期在該星期的最後一天 (星期六)
public static DateTime GetTheLastDayOfWeek(DateTime dt)
{
return dt.AddDays(7 + (int) dt.DayOfWeek*-1 - 1).Date;
}
///
/// 取得某日期在該月份的第一天 (1 號)
///
/// 某日期
///某日期在該月份的第一天
public static DateTime GetTheFirstDayOfMonth(DateTime dt)
{
return new DateTime(dt.Year, dt.Month, 1);
}
///
/// 取得某日期在該月份的最後一天
///
/// 某日期
///某日期在該月份的最後一天
public static DateTime GetTheLastDayOfMonth(DateTime dt)
{
return new DateTime(dt.Year, dt.Month + 1, 1).AddDays(-1);
}
///
/// 取得某日期在該月份每周的第一天列表
///
/// 某日期
///某日期在該月份每周的第一天列表
public static DateTime[] GetTheFirstDaysOfWeekInMoth(DateTime dt)
{
List dtList = new List();
DateTime dtTemp = GetTheFirstDayOfWeek(GetTheFirstDayOfMonth(dt)).Date;
DateTime dtEnd = GetTheLastDayOfMonth(dt).Date;
for (int i = 0; i < 6; i++)
{
if (dtTemp.AddDays(i*7) <= dtEnd)
{
dtList.Add(dtTemp.AddDays(i*7));
}
}
return dtList.ToArray();
}
///
/// 取得某日期在該季的第一天
///
/// 某日期
///某日期在該季的第一天
public static DateTime GetTheFirstDayOfQuarter(DateTime dt)
{
if (dt >= new DateTime(dt.Year, 1, 1) && dt <= new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 1, 1);
}
else if (dt >= new DateTime(dt.Year, 4, 1) && dt <= new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 4, 1);
}
else if (dt >= new DateTime(dt.Year, 7, 1) && dt <= new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 7, 1);
}
else
{
return new DateTime(dt.Year, 10, 1);
}
}
///
/// 取得某日期在該季的最後一天
///
/// 某日期
///某日期在該季的最後一天
public static DateTime GetTheLastDayOfQuarter(DateTime dt)
{
if (dt >= new DateTime(dt.Year, 1, 1) && dt <= new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month));
}
else if (dt >= new DateTime(dt.Year, 4, 1) && dt <= new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month));
}
else if (dt >= new DateTime(dt.Year, 7, 1) && dt <= new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month));
}
else
{
return new DateTime(dt.Year, 12, DateTime.DaysInMonth(dt.Year, dt.Month));
}
}
///
/// 取得某日期在該季每個月的第一天列表
///
/// 某日期
///取得某日期在該季每個月的第一天列表
public static DateTime[] GetTheFirstDaysOfMonthInQuarter(DateTime dt)
{
List dtList = new List();
DateTime dtTemp = GetTheFirstDayOfQuarter(dt);
DateTime dtEnd = GetTheLastDayOfQuarter(dt);
for (int i = 0; i < 3; i++)
{
if (new DateTime(dt.Year, dtTemp.AddMonths(i).Month, 1) <= dtEnd)
{
dtList.Add(new DateTime(dt.Year, dtTemp.AddMonths(i).Month, 1));
}
}
return dtList.ToArray();
}
///
/// 取得某日期在當年的第一天
///
/// 某日期
///某日期在當年的第一天
public static DateTime GetTheFirstDayOfYear(DateTime dt)
{
return new DateTime(dt.Year, 1, 1);
}
///
/// 取得某日期在當年的最後一天
///
/// 某日期
///某日期在當年的最後一天
public static DateTime GetTheLastDayOfYear(DateTime dt)
{
return new DateTime(dt.Year, 12, DateTime.DaysInMonth(dt.Year, 12));
}
///
/// 取得某日期於當年每一季的第一天列表
///
/// 某日期
///某日期於當年每一季的第一天列表
public static DateTime[] GetTheFirstDaysOfQuarterInYear(DateTime dt)
{
List dtList = new List();
dtList.Add(new DateTime(dt.Year, 1, 1));
dtList.Add(new DateTime(dt.Year, 4, 1));
dtList.Add(new DateTime(dt.Year, 7, 1));
dtList.Add(new DateTime(dt.Year, 10, 1));
return dtList.ToArray();
}
GetTheFirstDayOfWeek(): 某日期在該星期的第一天 (星期日)
GetTheLastDayOfWeek(): 某日期在該星期的最後一天 (星期六)
GetTheFirstDayOfMonth(): 某日期在該月份的第一天
GetTheLastDayOfMonth(): 取得某日期在該月份的最後一天
GetTheFirstDaysOfWeekInMoth(): 某日期在該月份每周的第一天列表
GetTheFirstDayOfQuarter(): 某日期在該季的第一天
GetTheLastDayOfQuarter(): 某日期在該季的最後一天
GetTheFirstDaysOfMonthInQuarter(): 取得某日期在該季每個月的第一天列表
GetTheFirstDayOfYear(): 某日期在當年的第一天
GetTheLastDayOfYear(): 某日期在當年的最後一天
GetTheFirstDaysOfQuarterInYear(): 某日期於當年每一季的第一天列表
///
/// 取得某日期的 24 小時時刻列表
///
/// 某日期
///
public static DateTime[] GetTheHoursOfDay(DateTime dt)
{
List
for (int i = 0; i < 24; i++)
{
dtList.Add(new DateTime(dt.Year, dt.Month, dt.Day, i, 0, 0));
}
return dtList.ToArray();
}
///
/// 取得某日期在該星期的第一天 (星期日)
///
/// 某日期
///
public static DateTime GetTheFirstDayOfWeek(DateTime dt)
{
return dt.AddDays((int) dt.DayOfWeek*-1).Date;
}
///
/// 取得某日期在該星期的最後一天 (星期六)
///
/// 某日期
///
public static DateTime GetTheLastDayOfWeek(DateTime dt)
{
return dt.AddDays(7 + (int) dt.DayOfWeek*-1 - 1).Date;
}
///
/// 取得某日期在該月份的第一天 (1 號)
///
/// 某日期
///
public static DateTime GetTheFirstDayOfMonth(DateTime dt)
{
return new DateTime(dt.Year, dt.Month, 1);
}
///
/// 取得某日期在該月份的最後一天
///
/// 某日期
///
public static DateTime GetTheLastDayOfMonth(DateTime dt)
{
return new DateTime(dt.Year, dt.Month + 1, 1).AddDays(-1);
}
///
/// 取得某日期在該月份每周的第一天列表
///
/// 某日期
///
public static DateTime[] GetTheFirstDaysOfWeekInMoth(DateTime dt)
{
List
DateTime dtTemp = GetTheFirstDayOfWeek(GetTheFirstDayOfMonth(dt)).Date;
DateTime dtEnd = GetTheLastDayOfMonth(dt).Date;
for (int i = 0; i < 6; i++)
{
if (dtTemp.AddDays(i*7) <= dtEnd)
{
dtList.Add(dtTemp.AddDays(i*7));
}
}
return dtList.ToArray();
}
///
/// 取得某日期在該季的第一天
///
/// 某日期
///
public static DateTime GetTheFirstDayOfQuarter(DateTime dt)
{
if (dt >= new DateTime(dt.Year, 1, 1) && dt <= new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 1, 1);
}
else if (dt >= new DateTime(dt.Year, 4, 1) && dt <= new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 4, 1);
}
else if (dt >= new DateTime(dt.Year, 7, 1) && dt <= new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 7, 1);
}
else
{
return new DateTime(dt.Year, 10, 1);
}
}
///
/// 取得某日期在該季的最後一天
///
/// 某日期
///
public static DateTime GetTheLastDayOfQuarter(DateTime dt)
{
if (dt >= new DateTime(dt.Year, 1, 1) && dt <= new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month));
}
else if (dt >= new DateTime(dt.Year, 4, 1) && dt <= new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month));
}
else if (dt >= new DateTime(dt.Year, 7, 1) && dt <= new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month));
}
else
{
return new DateTime(dt.Year, 12, DateTime.DaysInMonth(dt.Year, dt.Month));
}
}
///
/// 取得某日期在該季每個月的第一天列表
///
/// 某日期
///
public static DateTime[] GetTheFirstDaysOfMonthInQuarter(DateTime dt)
{
List
DateTime dtTemp = GetTheFirstDayOfQuarter(dt);
DateTime dtEnd = GetTheLastDayOfQuarter(dt);
for (int i = 0; i < 3; i++)
{
if (new DateTime(dt.Year, dtTemp.AddMonths(i).Month, 1) <= dtEnd)
{
dtList.Add(new DateTime(dt.Year, dtTemp.AddMonths(i).Month, 1));
}
}
return dtList.ToArray();
}
///
/// 取得某日期在當年的第一天
///
/// 某日期
///
public static DateTime GetTheFirstDayOfYear(DateTime dt)
{
return new DateTime(dt.Year, 1, 1);
}
///
/// 取得某日期在當年的最後一天
///
/// 某日期
///
public static DateTime GetTheLastDayOfYear(DateTime dt)
{
return new DateTime(dt.Year, 12, DateTime.DaysInMonth(dt.Year, 12));
}
///
/// 取得某日期於當年每一季的第一天列表
///
/// 某日期
///
public static DateTime[] GetTheFirstDaysOfQuarterInYear(DateTime dt)
{
List
dtList.Add(new DateTime(dt.Year, 1, 1));
dtList.Add(new DateTime(dt.Year, 4, 1));
dtList.Add(new DateTime(dt.Year, 7, 1));
dtList.Add(new DateTime(dt.Year, 10, 1));
return dtList.ToArray();
}
C# 判斷是否為數字
public static long checkint(string str)
{
try
{
int li_str=Convert.ToInt16(str);
}
catch
{
return -1;
}
return 1;
}
{
try
{
int li_str=Convert.ToInt16(str);
}
catch
{
return -1;
}
return 1;
}
Regular expression
如果您查詢J2SE 1.4之後String的線上API手冊說明,您會發現有matches()、replaceAll()等方法,您所傳入的參數是「正則表示式」(Regular expression)的字串,正則表示式的功能是J2SE 1.4之後加入的新功能。
正則表示式最早是由數學家Stephen Kleene于1956年提出,主要使用在字元字串的格式比對,後來在資訊領域廣為應用,現在已經成為ISO(國際標準組織)的標準之一。
Java在J2SE 1.4之後開始支援正則表示式,您可以在API文件的 java.util.regex.Pattern 類別中找到支援的正則表示式相關資訊。
如果您使用String類別來配置字串物件,您可以使用簡易的方法來使用正則表示式,並應用於字串的比對或取代等動作上,以下先介紹幾個簡單的正則表示式。
例如一些常用的範圍,我們可以使用預先定義的字元類別:
. 符合任一字元
\d 等於 [0-9] 數字
\D 等於 [^0-9] 非數字
\s 等於 [ \t\n\x0B\f\r] 空白字元
\S 等於 [^ \t\n\x0B\f\r] 非空白字元
\w 等於 [a-zA-Z_0-9] 數字或是英文字
\W 等於 [^a-zA-Z_0-9] 非數字與英文字
. 符合任一字元。例如有一字串abcdebcadxbc,使用.bc來比對的話,符合的子字串有abc、ebc、xbc三個;如果使用..cd,則符合的子字串只有bcd。
以上的例子來根據字元比對,您也可以使用「字元類」(Character class)來比較一組字元範圍,例如:
[abc] a、b或c
[^abc] 非a、b、c的其它字元
[a-zA-Z] a到z或A到Z(範圍)
[a-d[m-p]] a到d或m到p(聯集)
[a-z&&[def]] d、e或f(交集)
[a-z&&[^bc]] a到z,除了b與c之外(減集)
[a-z&&[^m-p]] a到z且沒有m到p(a-lq-z)(減集)
一次只指定一個字元不過癮,也可以用Greedy quantifiers來指定字元可能出現的次數:
X? X出現一次或完全沒有
X* X出現零次或多次
X+ X出現一次或多次
X{n} X出現n次
X{n,} X出現至少n次
X{n,m} X出現至少n次,但不超過m次
另外還有Reluctant quantifiers、Possessive quantifiers等的指定,您可以自行參考 java.util.regex.Pattern 類別中的說明。
在String類別中,matches()方法可以讓您驗證字串是否符合指定的正規表示式,這通常用於驗證使用者輸入的字串資料是否正確,例如電話號碼格式;replaceAll()方法可以將符合正規表示式的子字串置換為指定的字串;split()方法可以讓您依指定的正規表示式,將符合的子字串分離出來,並以字串陣列傳回。
下面這個程式示範幾個正則表示式的應用:
• UseRegularExpression.java
import java.util.Scanner;
public class UseRegularExpression {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
String str = "abcdefgabcabc";
System.out.println(str.replaceAll(".bc", "###"));
System.out.print("輸入手機號碼: ");
str = scanner.next();
// 簡單格式驗證
if(str.matches("[0-9]{4}-[0-9]{6}"))
System.out.println("格式正確");
else
System.out.println("格式錯誤");
System.out.print("輸入href標籤: ");
// Scanner的next()方法是以空白為區隔
// 我們的輸入有空白,所以要執行兩次
str = scanner.next() + " " + scanner.next();
// 驗證href標籤
if(str.matches(""))
System.out.println("格式正確");
else
System.out.println("格式錯誤");
System.out.print("輸入電子郵件: ");
str = scanner.next();
// 驗證電子郵件格式
if(str.matches(
"^[_a-z0-9-]+([.][_a-z0-9-]+)*@[a-z0-9-]+([.][a-z0-9-]+)*$"))
System.out.println("格式正確");
else
System.out.println("格式錯誤");
}
}
正則表示式最早是由數學家Stephen Kleene于1956年提出,主要使用在字元字串的格式比對,後來在資訊領域廣為應用,現在已經成為ISO(國際標準組織)的標準之一。
Java在J2SE 1.4之後開始支援正則表示式,您可以在API文件的 java.util.regex.Pattern 類別中找到支援的正則表示式相關資訊。
如果您使用String類別來配置字串物件,您可以使用簡易的方法來使用正則表示式,並應用於字串的比對或取代等動作上,以下先介紹幾個簡單的正則表示式。
例如一些常用的範圍,我們可以使用預先定義的字元類別:
. 符合任一字元
\d 等於 [0-9] 數字
\D 等於 [^0-9] 非數字
\s 等於 [ \t\n\x0B\f\r] 空白字元
\S 等於 [^ \t\n\x0B\f\r] 非空白字元
\w 等於 [a-zA-Z_0-9] 數字或是英文字
\W 等於 [^a-zA-Z_0-9] 非數字與英文字
. 符合任一字元。例如有一字串abcdebcadxbc,使用.bc來比對的話,符合的子字串有abc、ebc、xbc三個;如果使用..cd,則符合的子字串只有bcd。
以上的例子來根據字元比對,您也可以使用「字元類」(Character class)來比較一組字元範圍,例如:
[abc] a、b或c
[^abc] 非a、b、c的其它字元
[a-zA-Z] a到z或A到Z(範圍)
[a-d[m-p]] a到d或m到p(聯集)
[a-z&&[def]] d、e或f(交集)
[a-z&&[^bc]] a到z,除了b與c之外(減集)
[a-z&&[^m-p]] a到z且沒有m到p(a-lq-z)(減集)
一次只指定一個字元不過癮,也可以用Greedy quantifiers來指定字元可能出現的次數:
X? X出現一次或完全沒有
X* X出現零次或多次
X+ X出現一次或多次
X{n} X出現n次
X{n,} X出現至少n次
X{n,m} X出現至少n次,但不超過m次
另外還有Reluctant quantifiers、Possessive quantifiers等的指定,您可以自行參考 java.util.regex.Pattern 類別中的說明。
在String類別中,matches()方法可以讓您驗證字串是否符合指定的正規表示式,這通常用於驗證使用者輸入的字串資料是否正確,例如電話號碼格式;replaceAll()方法可以將符合正規表示式的子字串置換為指定的字串;split()方法可以讓您依指定的正規表示式,將符合的子字串分離出來,並以字串陣列傳回。
下面這個程式示範幾個正則表示式的應用:
• UseRegularExpression.java
import java.util.Scanner;
public class UseRegularExpression {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
String str = "abcdefgabcabc";
System.out.println(str.replaceAll(".bc", "###"));
System.out.print("輸入手機號碼: ");
str = scanner.next();
// 簡單格式驗證
if(str.matches("[0-9]{4}-[0-9]{6}"))
System.out.println("格式正確");
else
System.out.println("格式錯誤");
System.out.print("輸入href標籤: ");
// Scanner的next()方法是以空白為區隔
// 我們的輸入有空白,所以要執行兩次
str = scanner.next() + " " + scanner.next();
// 驗證href標籤
if(str.matches("
System.out.println("格式正確");
else
System.out.println("格式錯誤");
System.out.print("輸入電子郵件: ");
str = scanner.next();
// 驗證電子郵件格式
if(str.matches(
"^[_a-z0-9-]+([.][_a-z0-9-]+)*@[a-z0-9-]+([.][a-z0-9-]+)*$"))
System.out.println("格式正確");
else
System.out.println("格式錯誤");
}
}
公司統一編號驗證
/*
* 項 目 計 算 方 法 說 明
統一編號 0 4 5 9 5 2 5 7
邏輯乘數 1 2 1 2 1 2 4 1 兩數上下對應相乘
乘 積 0 8 5 1 5 4 2 7
0 0 0 8 0 0 0 0 乘積直寫並上下相加
--------------------------------------------
乘積之和 0 8 5 9 5 4 2 7 將相加之和再相加
0+8+5+9+5+4+2+7=40 正確!
最後結果, 40 能被 10 整除, 故 04595257 符合邏輯。
*若第七位數字為 7 時
統一編號 1 0 4 5 8 5 7 5 倒數號二位為 7
邏輯乘數 1 2 1 2 1 2 4 1 兩數上下對應相乘
乘 積 1 0 4 1 8 1 2 5
0 0 0 0 0 0 8 0 乘積直寫並上下相加
---------------------------------------------
乘積之和 1 0 4 1 8 1 1 5
0 再相加時最後第二位數取 0 或 1 均可。
1+0+4+1+8+1+1+5=21
1+0+4+1+8+1+0+5=20 正確!
最後結果中, 20 能被 10 整除, 故 10458575 符合邏輯。
public static bool checkCompanyID(string sCompanyID)
{
try
{
//傳入公司統編長度不等於8就return
if(sCompanyID.Length != 8)
return false;
int aSum = 0;
//公司統編邏輯乘數( 1, 2, 1, 2, 1, 2, 4, 1 )
int[] LogicCompanyID = {1, 2, 1, 2, 1, 2, 4, 1};
for(int i = 0 ; i < LogicCompanyID.Length ; i++)
{
//公司統編與邏輯乘數相乘
int aMultiply = Convert.ToInt32(sCompanyID.Substring(i,1)) * LogicCompanyID[i];
//將相乘的結果, 取十位數及個位數相加
int aAddition = ((aMultiply / 10) + (aMultiply % 10));
//如果公司統編的第 7 位是 7 時, 會造成相加結果為 10 的特殊情況, 所以直接以 0 代替進行加總
aSum += (aAddition == 10)?0:aAddition;
}
//判斷總和的餘數, 假使為 0 公司統編正確回傳 true, 其它值則反之.
return (aSum % 10 == 0);
}
catch
{
return false;
}
例外狀況: 70664079
* 項 目 計 算 方 法 說 明
統一編號 0 4 5 9 5 2 5 7
邏輯乘數 1 2 1 2 1 2 4 1 兩數上下對應相乘
乘 積 0 8 5 1 5 4 2 7
0 0 0 8 0 0 0 0 乘積直寫並上下相加
--------------------------------------------
乘積之和 0 8 5 9 5 4 2 7 將相加之和再相加
0+8+5+9+5+4+2+7=40 正確!
最後結果, 40 能被 10 整除, 故 04595257 符合邏輯。
*若第七位數字為 7 時
統一編號 1 0 4 5 8 5 7 5 倒數號二位為 7
邏輯乘數 1 2 1 2 1 2 4 1 兩數上下對應相乘
乘 積 1 0 4 1 8 1 2 5
0 0 0 0 0 0 8 0 乘積直寫並上下相加
---------------------------------------------
乘積之和 1 0 4 1 8 1 1 5
0 再相加時最後第二位數取 0 或 1 均可。
1+0+4+1+8+1+1+5=21
1+0+4+1+8+1+0+5=20 正確!
最後結果中, 20 能被 10 整除, 故 10458575 符合邏輯。
public static bool checkCompanyID(string sCompanyID)
{
try
{
//傳入公司統編長度不等於8就return
if(sCompanyID.Length != 8)
return false;
int aSum = 0;
//公司統編邏輯乘數( 1, 2, 1, 2, 1, 2, 4, 1 )
int[] LogicCompanyID = {1, 2, 1, 2, 1, 2, 4, 1};
for(int i = 0 ; i < LogicCompanyID.Length ; i++)
{
//公司統編與邏輯乘數相乘
int aMultiply = Convert.ToInt32(sCompanyID.Substring(i,1)) * LogicCompanyID[i];
//將相乘的結果, 取十位數及個位數相加
int aAddition = ((aMultiply / 10) + (aMultiply % 10));
//如果公司統編的第 7 位是 7 時, 會造成相加結果為 10 的特殊情況, 所以直接以 0 代替進行加總
aSum += (aAddition == 10)?0:aAddition;
}
//判斷總和的餘數, 假使為 0 公司統編正確回傳 true, 其它值則反之.
return (aSum % 10 == 0);
}
catch
{
return false;
}
例外狀況: 70664079
訂閱:
文章 (Atom)