2008年3月20日 星期四

.NET 可以算出農曆嗎?

答案, 還是Yes!!

.NET Framework (2.0以上)的類別庫中有一個TaiwanLunisolarCalendar 類別(參考: http://msdn2.microsoft.com/zh-tw/library/system.globalization.taiwanlunisolarcalendar.aspx)

這個類別的可看性就多囉!

它與一般的西曆及國曆是很不一樣的, 尤其可能有閏月. 要顯示完整的年月日, 至少要用到以下幾個方法:

  • GetSexagenaryYear
  • GetCelestialStem
  • GetTerrestrialBranch
  • GetMonth
  • GetLeapMonth
  • GetDayOfMonth

下列程式是完整的範例:

        Dim cal As New TaiwanLunisolarCalendar()
Dim now As Date = Date.Now.AddYears(-1)

Dim 天干 As String = "甲乙丙丁戊己庚辛壬癸"
Dim 地支 As String = "子丑寅卯辰巳午未申酉戌亥"

Dim lun60Year As Integer = cal.GetSexagenaryYear(now)
Dim 天干Year As Integer = cal.GetCelestialStem(lun60Year) - 1
Dim 地支Year As Integer = cal.GetTerrestrialBranch(lun60Year) - 1

Dim lunMonth As Integer = cal.GetMonth(now)
Dim leapMonth As Integer = cal.GetLeapMonth(cal.GetYear(now))

If leapMonth > 0 AndAlso lunMonth >= leapMonth Then
lunMonth -= 1
End If
Dim lunDay As Integer = cal.GetDayOfMonth(now)

MessageBox.Show(String.Format("農曆:{0}年{1}月{2}日", _
天干(天干Year) & 地支(地支Year), lunMonth, lunDay))

                TaiwanLunisolarCalendar cal =new TaiwanLunisolarCalendar()  ;
DateTime now = DateTime.Now.AddYears(-1) ;

String 天干= "0甲乙丙丁戊己庚辛壬癸" ;
String 地支= "0子丑寅卯辰巳午未申酉戌亥" ;

int lun60Year = cal.GetSexagenaryYear(now) ;
int 天干Year = cal.GetCelestialStem(lun60Year) ;
int 地支Year = cal.GetTerrestrialBranch(lun60Year) ;

int lunMonth = cal.GetMonth(now) ;
int leapMonth = cal.GetLeapMonth(cal.GetYear(now)) ;

if (leapMonth > 0 && lunMonth >= leapMonth )
{
lunMonth -= 1 ;
}
int lunDay = cal.GetDayOfMonth(now) ;

MessageBox.Show(String.Format("農曆:{0}年{1}月{2}日",
天干[天干Year].ToString() + 地支[地支Year].ToString(), lunMonth, lunDay));

以今天的日期(AddYears(-1))來執行, 得到的結果會是(去年的今天):
農曆:丁亥年2月2日

2008年3月19日 星期三

.NET 會算中華民國曆嗎?

答案是: Yes!!

.NET Framework (2.0以上)的類別庫中有一個 TaiwanCalendar (參考http://msdn2.microsoft.com/zh-tw/library/system.globalization.taiwancalendar.aspx)

不過, 台灣曆法與西曆只有差在紀元的計算, 例如, 西曆的2008年3月18日, 等於中華民國年的97年3月18日.

比較常用的會是它的GetYear方法, 如以下範例:

Dim cal As New TaiwanCalendar
Dim twYear As Integer = cal.GetYear(Date.Now)
MessageBox.Show("現在是中華民國:" & twYear & "年")
如果想直接讓應用程式使用中華民國曆法, 可以這樣寫:
Dim twCI As New CultureInfo("zh-TW")
twCI.DateTimeFormat.Calendar = New TaiwanCalendar()
Thread.CurrentThread.CurrentCulture = twCI
Console.WriteLine(Date.Now.ToLongDateString)

            CultureInfo twCI =new CultureInfo("zh-TW")  ;
twCI.DateTimeFormat.Calendar = new TaiwanCalendar() ;
Thread.CurrentThread.CurrentCulture = twCI ;
listBox1.Items.Add(DateTime.Now.ToLongDateString());

這樣將會印出如下格式的日期:
中華民國97年3月18日

2008年3月18日 星期二

書上架了!!

Visual Studio 2008 系列書終於上架囉!!

媽咪說只要讀完這些書我就是.net神童了!

小寶1

要從哪一本書開始呢?

 小寶2

2008年3月13日 星期四

3/18 確定會上架

出版社今天確定3/18會上架.

2008年3月11日 星期二

書的封面來了


書的封面終於出來了, 隨著書封面的遲到, 原本預計3/14出廠的書(內文早就進廠了)也將可能延遲到3/19才上架 (整個書系皆是).


唉~ 本來很期待這星期就可以拿到的 :< 已經預購的朋友們, 我們一起耐心等待吧!

2008年3月9日 星期日

Refactor! for Visual Basic 2008 的安裝說明

這本書的前一版(Visual Studio 2005 完全探索)有提到關於Refactor!的用法, 在[Visual Studio 2008最佳實務講座]已經完全移除. 並不是Visual Studio 2008的VB不支援, 而是書中新增太多VB重要而且必須講的內容. 在書本厚度(成本)等壓力下, Refactor!部份決定移除了. 作者將於此Blog陸續補上相關的應用及說明.

安裝需求

必須安裝Visual Studio 2008。

步驟1-下載

  1. 開啟IE,連接到http://msdn2.microsoft.com/zh-tw/vbasic/bb693327(en-us).aspx

    1

  2. 如圖點選Download now下載.

    (網頁會轉到另一個Page, 點選[ Download Your Copy Now >>]即可.)

  3. 下載完成後, 將取得[RefactorVB.NET-3.0.5.exe].

步驟2-安裝

  1. 執行[RefactorVB.NET-3.0.5.exe].
  2. 決定是否啟用Log記錄若需Log, 勾選[Enable Log], 然後點選【Install】按鈕.

    2

  3. 接著出現安裝精靈,點選【Next】按鈕。

    3

  4. 接著出現版權頁,選取「I accept the terms in the license agreement」,然後點選【Next】按鈕。

    4

  5. 在接下來的畫面上輸入「User Name」、「Organization」,點選【Next】按鈕。

    5

  6. 確定安裝位置,點選【Next】按鈕。

    6

  7. 決定是否事先執行MSDN說明的Namespace合併.

    若未勾選, Namespace合併作業將會在第一次開啟MSDN說明時進行.

    7

  8. 接著點選【Install】按鈕。開始進行安裝程序。

    8

  9. 安裝完成後出現如下畫面,點選【Finish】按鈕。

    9

  10. 開啟Visual Studio 2008在版權頁會看到已安裝的產品清單多了一個項目[Refactor! For Visual Studio]。代表安裝完成。

    10

2008年3月7日 星期五

Visual Basic的重構(Refactor)

這張圖是C#編輯器提供的Refactor功能.

可惜的是Visual Studio 2008的Visual Basic編輯器並沒提供Refactor的功能.

如果要說有, [重新命名]勉強算是. 其他的如"擷取方法", "封裝欄位", "擷取介面", "將區域變數提升至參數", "移除參數", "重新排列參數"...等這些項目在Visual Basic編輯器是了無蹤影.

Visual Basic的開發人員若想要享用Refactor的功能, 必須另外加裝Refactor! for Visual Basic 2008 .

下載及相關說明可以從http://msdn2.microsoft.com/en-us/vbasic/bb693327.aspx獲得.

2008年3月6日 星期四

Visual Basic 2008 上市了

Visual Basic 2008上市了,新增哪些功能?
安啦~ 肯定與Visual Basic 2005一樣,新增最大的功能就是讓人印象最深刻的「My」,「My」對於老Visual Basic來說真是親切無比,那些從Visual Basic 6到.NET之後找不到的功能,幾乎都可以在「My」裡面重見…。Visual Basic 2008是不是新增了個「I」,變的更加親切了呢?!

如果你抱著這樣的心態來看Visual Basic 2008,那就錯囉! 雖然這次的更新不像Visual Basic語言進入.NET世界當時發生那麼大的變革(Visual Basic 7新增物件導向的功能,弄的老Visual Basic們幾乎要重新學習! ),卻也會讓老Visual Basic們驚豔及花上一番功夫來學習它。

哪麼Visual Basic 2008到底新增什麼嚇人的功能呢?

話要從.NET 3.5開始說起,.NET 3.5引入一個新的資料查詢語言 -- Language Integrated Query(簡稱:LINQ,念音與Link相同)的功能。並且整合到Visual Basic以及C#語言,讓Visual Basic、C#擁有像SQL語法一般的資料查詢功能,可以對關聯式資料庫、DataSet、XML、物件集合…等資料來源進行類似SQL指令的查詢,它的語法:

From ... <Where ... Order By ... Select ... >

舉個簡單的例子:
Dim member() As String = {"Mary", "John", "Anita", "Lisa", "Andy", "Blue"}
Dim beginOfA = From name In member Where name Like "A*" Order By name
For Each s As String In beginOfA
Console.WriteLine(s)
Next

第一行是記錄人名的陣列. 第二行是使用LINQ查詢A開頭的人名. 第三行取得beginOfA查詢結果的陣列,使用For Each列出陣列內容. 得到的結果是:

Andy
Anita

沒錯LINQ語法是Visual Basic 2008(Visual Basic 9)這個版本新增的重要語法,別小看這個From … Where … 等句子,裡面可是包含很多重要的技術。如果你像我一樣迫不及待的窺探LINQ的世界,那麼你一定得先學學Visual Basic新增的觀念及語法:


  • 型別推論能力

  • Object Initializer/Object Initializer

  • 匿名型別

  • 擴充方法

  • Lambda Expressions

  • Query Expressions

  • Partial Methods

  • XML literals

  • Nullable types

  • Anonymous types

這些新功能大部份是為了讓LINQ語法使用起來更加的簡潔有力而設計的。

2008年3月4日 星期二

新書上市預告

Visual Studio 2008即將於今年的四月上市發表(其實已經在2008年元月可以下載到中文試用版)書也如預期的在二月中旬完成.

這本書主要的對象是針對想進入.NET程式開發世界的朋友們而寫的. 帶領讀者從最初淺的Visual Basic 語法到視窗應用程式的開發, 物件導向, 集合, 泛型以及Visual Basic 9最新的查詢運算式, 使用淺顯易懂的範例, 期望.NET的初學者能輕鬆的學會Visual Basic 2008.

書共分為三大部份,第一篇著重在語言基礎觀念的建立、第二篇著重在視窗的應用、第三篇則是從物件導向的角度探索Visual Basic 2008的語言世界。每個章節中設計了許多範例與實作,並於實作中設計重要觀念的問答題,期望讀者能藉此深入了解Visual Basic 2008以及工具Visual Studio 2008+的使用,進而學會使用Visual Basic 2008開發應用程式。

第一篇 語言基礎篇



在成為應用程式的程式設計師之前,你必須先學會如何使用程式語言,這一篇著重在Visual Basic程式語言的介紹與實作。讀者將從這章學到什麼是.NET Framework、Visual Studio 2008工具的使用以及Visual Basic程式語言。
  • 第1章:Visual Studio 2008概述
  • 第2章:Visual Basic 2008概述
  • 第3章:視窗輸入與輸出
  • 第4章:資料與變數
  • 第5章:流程控制
  • 第6章:迴圈
  • 第7章:程序與函式
  • 第8章:偵錯及例外處理
  • 第9章:類別與標準模組
  • 第10章:再探資料與變數


第二篇 視窗應用篇



在學會Visual Basic的基本語法之後,接下來我們再進一步的學習利用Visual Basic及Visual Studio開發工具開發Windows應用程式。在這第二篇中,你將學會如何建立Windows應用程式以及多種控制項的使用,同時你會了解如何開發一個可以存取資料庫的Windows應用程式以及報表。
  • 第11章 Windows表單
  • 第12章 Windows控制項
  • 第13章 資料庫存取
  • 第14章報表工具

第三篇 語言進階篇



Visual Basic是個物件導向的語言,如果你只會基本的Visual Basic語法,那只能說你會的不過是Visual Basic 6.0(Visual Basic 2008是產品名稱,它的版本代號是9.0 – Visual Basic 9.0)。第三篇我們將重點放在物件導向以及更多的進階議題,像是集合、泛型還有檔案系統。另外My命名空間也是Visual Basic獨有的特色,身為一個開發人員不可不會。同時在這篇中也加入了開發應用程式非常重要的議題 – 安裝與部署。
Visual Studio 2008預設對映的.NET版本是3.5,.NET 3.5新增一個非常重要的功能LINQ,也因此使得Visual Basic 2008新增許多新的語法,這些新增的語法我們將在最後一章中做介紹。
  • 第15章 物件導向
  • 第16章 集合
  • 第17章 泛型
  • 第18章 檔案系統
  • 第19章 Visual Basic的程式捷徑 -- My
  • 第20章 安裝與部署
  • 第21章 Visual Basic 2008新增功能