Lịch Âm Dương năm 2010

Các thủ thuật liên quan đến xử lý chuỗi và thời gian
Post Reply
User avatar
truongphu
VIP
VIP
Posts: 4781
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

Lịch Âm Dương năm 2010

Post by truongphu »

Thủ thuật: Lịch Âm Dương năm 2010
Tác giả: truongphu
Mô tả: Lich Âm Dương 2010, Code gọn, Đã sửa chửa nhiều so phiên bản 2009

Code: Select all

Dim Ngay As Integer, TenN As String, Thang As Integer, TenT As String, Nam As Integer, TenNa As String, Nh As StringPrivate Function ToAL(data As Date)Dim Can() As String, Chi() As String, N As BooleanDim DL() As String, i As Byte, days As Byte, cach As IntegerDL = Split("100,1,1,1,0,1,0,1,0,0,1,0,1,0", ",") ' sô' 100 không dùng (Nhuân)cach = DateDiff("d", #1/1/2010#, data) + 17  Thang = 11    For i = 1 To 13    days = 29 + CByte(DL(i))                        If cach > days Then                cach = cach - days                If i = DL(0) + 1 Then ' phâ'n nâ'y không dùng (Nhuân)                    Thang = Thang ' phâ'n nâ'y không dùng (Nhuân)                    N = True ' phâ'n nâ'y không dùng (Nhuân)                Else                    Thang = Thang + 1                End If                If Thang > 12 Then Thang = Thang - 12            Else                Exit For            End If     NextNgay = cachIf Ngay = 0 Then Ngay = 30Can = Split("Canh,Tân,Nhâm,Qúy,Giáp,Ât,Bính,Ðinh,Mâu,Ky", ",")Chi = Split("Thân,Dâu,Tuâ't,Ho'i,Tý,Su'u,Dâ'n,Mão,Thìn,Ty,Ngo,Mùi", ",")TenN = Can(DateDiff("d", #4/1/1800#, data) Mod 10) & " " & Chi(DateDiff("d", #4/1/1800#, data) Mod 12)If (Thang = 11) Or (Thang = 12) Then Nam = 2009 Else Nam = 2010If (Nam = 2009) And (data > #5/5/2010#) Then Nam = 2010TenT = Can((Nam * 12 + Thang + 7) Mod 10) & " " & Chi((Thang + 5) Mod 12)If (Thang = 11) Or (Thang = 12) Then TenNa = "Ky Su'u" Else TenNa = "Canh Dâ'n"If (TenNa = "Ky Su'u") And (data > #5/5/2010#) Then TenNa = "Canh Dâ'n"If N = True Then Nh = " (Nh)" Else Nh = ""End Function Private Sub HScroll1_Change()Select Case HScroll2.Value    Case 1, 3, 5, 7, 8, 10, 12    HScroll1.Max = 31    Case 2    HScroll1.Max = 28    Case 4, 6, 9, 11    HScroll1.Max = 30End SelectDim DMY As DateDMY = CDate(HScroll2.Value & "/" & HScroll1.Value & "/" & "2010")Label1.Caption = Day(DMY) & "/" & Month(DMY) & "/2010"Text1 = ToAL(DMY)Text1 = "Ngày " & TenN & vbCrLf & "Tháng " & TenT & Nh & vbCrLf & "Nam " & TenNa & vbCrLf & Ngay & "/" & Thang & "/" & NamEnd Sub Private Sub HScroll2_Change()Call HScroll1_ChangeEnd Sub 
Attachments
Nam 2010 TôT.rar
(2.12 KiB) Downloaded 1240 times
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
User avatar
truongphu
VIP
VIP
Posts: 4781
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

Code cho Lịch Âm-Dương mọi năm

Post by truongphu »

Code cho Lịch Âm-Dương mọi năm

Đây là Code tôi chỉnh sửa lại để tiện dùng cho mọi năm (hằng năm)
Vì là code rút gọn tối đa nên bạn phải cung cấp số liệu cho từng năm DL
* Dòng 7, bạn gõ ngày tết dương lịch của năm mới
* Dòng 10, trong hàm Split có 14 số
- Số đầu là tháng nhuận AL, nếu năm không nhuận, gõ số 13
- số thứ 2 là ký hiệu đủ-thiếu của tháng AL vào ngày tết DL: 1 là đủ, 0 là thiếu
- các số tiếp theo là tháng tiếp theo, số cuối tương ứng với tháng AL của tháng 12 DL
* Dòng 11, sau dấu cọng bạn gõ ngày AL tương ứng ngày tết DL; vd 1/1/2010 có AL là 17/11, ta gõ 17
* Dòng 12, gõ tháng AL vào ngày tết DL
Chỉ thế thôi, với Function ToAL sau đây, bạn có thể tạo lịch bất cứ năm nào
(Nếu bạn không thích từng năm phải tự cung cấp số liệu, mời xem bài lịch vạn năm của bạn vie87vn. Các số liệu trong các bài viết về lịch của tôi đều dùng lịch của bạn vie87vn)

Code: Select all

Dim NgàyAL As Integer, TênNgàyAL As String, ThángAL As Integer, TênThángAL As String, Nam As Integer, TênNaM As String, Nh As String Private Function ToAL(data As Date)Dim Can() As String, Chi() As String, TêTDL As DateCan = Split("Canh,Tân,Nhâm,Qúy,Giáp,Ât,Bính,Ðinh,Mâu,Ky", ",")Chi = Split("Thân,Dâu,Tuâ't,Ho'i,Tý,Su'u,Dâ'n,Mão,Thìn,Ty,Ngo,Mùi", ",")TêTDL = #1/1/2010#  ' <-- Cung câ'p sô' liêu Dim DuLieu() As String, i As Byte, DaysAL As ByteDuLieu = Split("13,1,1,1,0,1,0,1,0,0,1,0,1,0", ",") ' Nam AL không nhuân ghi sô' 13, nhuân ghi tháng nhuân  ' <-- Cung câ'p sô' liêuNgàyAL = DateDiff("d", TêTDL, data) + 17 ' Cong thêm ngày AL vào ngày 1/1/2010  ' <-- Cung câ'p sô' liêu  ThángAL = 11 ' Ghi tháng AL vào ngày 1/1/2010  ' <-- Cung câ'p sô' liêu    For i = 1 To 13        DaysAL = 29 + CByte(DuLieu(i))                        If NgàyAL > DaysAL Then                NgàyAL = NgàyAL - DaysAL                If i = DuLieu(0) + 1 Then ' Chi dùng cho tháng nhuân                    ThángAL = ThángAL ' Chi dùng cho tháng nhuân                    Nh = " (Nh)" ' Chi dùng cho tháng nhuân                Else                    ThángAL = ThángAL + 1                End If                If ThángAL > 12 Then ThángAL = ThángAL - 12            Else                Exit For            End If    Next TênNgàyAL = Can(DateDiff("d", #4/1/1800#, data) Mod 10) & " " & Chi(DateDiff("d", #4/1/1800#, data) Mod 12)TênThángAL = Can((Nam * 12 + ThángAL + 7) Mod 10) & " " & Chi((ThángAL + 5) Mod 12)     If ((ThángAL = 11) Or (ThángAL = 12)) And (data < TêTDL + 60) Then ' Ðiê'u chinh tháng 11, 12 Ðâ'u nam DL        Nam = Year(TêTDL) - 1    Else        Nam = Year(TêTDL)    End IfTênNaM = Can(Nam Mod 10) & " " & Chi(Nam Mod 12) End Function
Đương nhiên code nầy hay hơn code bài trên
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
User avatar
truongphu
VIP
VIP
Posts: 4781
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

Re: Lịch Âm Dương năm 2010

Post by truongphu »

Thêm cái lịch tháng cho vui
Attachments
untitled.JPG
Lich tháng-2010.rar
(4.68 KiB) Downloaded 1076 times
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
btamsgn
Thành viên chính thức
Thành viên chính thức
Posts: 47
Joined: Thu 10/04/2008 4:40 pm
Has thanked: 3 times

Re: Lịch Âm Dương năm 2010

Post by btamsgn »

Hi a.Phú,

anh có thể thêm chức năng giờ theo can/chi vào chương trình như chỉ cần nhập ngày tháng năm và giờ sinh của một người nào đó thì chương trình chuyển đổi từ Dương lịch sang âm lịch hoặc từ Âm lịch sang dương lịch khi họ click vào check box âm lịch hoặc dương lịch
ví dụ : ngày 19 tháng 12 năm 2010 vào lúc 17:30 ==>Âm lịch: Ngày 14 tháng một, năm 2010 (ngày Quý Mão, tháng Mậu Tí, năm Canh Dần; giờ Tân Dậu)
http://www.thoigian.com.vn/
kingstar99
Posts: 6
Joined: Wed 02/11/2011 10:09 pm
Has thanked: 1 time
Been thanked: 6 times

Re: Lịch Âm Dương năm 2010

Post by kingstar99 »

Bác Phú xem giùm em ! Lổi này là gì, Em copy code của bác paste vào ra thế này ?
Image
User avatar
truongphu
VIP
VIP
Posts: 4781
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

Re: Lịch Âm Dương năm 2010

Post by truongphu »

biến TêTDL là biến Date, VB6 cho phép cọng thoải mái với một số nguyên khác...
bạn bị lỗi có lẽ .Net không tương thích?
bạn dùng thử lịch năm 2012 tôi mới viết, còn bài trên tôi viết đã lâu rồi...
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Post Reply

Return to “[VB] Chuỗi và Thời gian”