Monthly Archives: Januari 2011

Menghitung Interval Waktu di C#

Di bahasa VB.net, DateDiff digunakan untuk menghitung interval hari, jam, menit dan detik antara dua waktu. Namun fungsi ini tidak tersedia di C#. Ketika sedang ‘otak-atik’ C#, saya menemui kesulitan ketika harus menghitung interval antara dua waktu. Setelah bertanya-tanya ke Om Google dan mencoba beberapa kode akhirnya saya mendapatkan pengganti dari fungsi DateDiff ini yaitu: TimeSpan

Saya membuat contoh kode berikut dalam VB.net:

Dim awal As DateTime = New DateTime(2010, 12, 1, 12, 13, 9)
Dim akhir As DateTime = New DateTime(2011, 1, 12, 13, 22, 10)

Dim dd As Double = DateDiff(DateInterval.Second, awal, akhir)

Console.WriteLine("awal : " & awal.ToString("dd/MM/yyyy HH:mm:ss"))
Console.WriteLine("akhir : " & akhir.ToString("dd/MM/yyyy HH:mm:ss"))

Console.WriteLine("selisih jam: " & DateDiff(DateInterval.Hour, awal, akhir))
Console.WriteLine("selisih menit: " & DateDiff(DateInterval.Minute, awal, akhir))
Console.WriteLine("selisih detik : " & DateDiff(DateInterval.Second, awal, akhir))
Console.WriteLine("HH:mm:ss --> " & ((dd - (dd Mod 3600)) / 3600 & ":" & (((dd - (dd Mod 60))) / 60) Mod 60 & ":" & (dd Mod 60)))

Hasilnya seperti gambar berikut:

Lalu bagaimana dengan C#? Saya mengubah kode diatas menjadi C# dan menggunakan TimeSpan.

DateTime awal = new DateTime(2010, 12, 1, 12, 13, 9);
DateTime akhir = new DateTime(2011, 1, 12, 13, 22, 10);
TimeSpan span = akhir.Subtract(awal);

double d1 = span.TotalSeconds;

Console.WriteLine("awal : " + awal.ToString("dd/MM/yyyy HH:mm:ss"));
Console.WriteLine("akhir : " + akhir.ToString("dd/MM/yyyy HH:mm:ss"));
Console.WriteLine("selisih hari: " + span.TotalDays);
Console.WriteLine("selisih jam: " + span.TotalHours);
Console.WriteLine("selisih menit: " + span.TotalMinutes);
Console.WriteLine("selisih detik : " + span.TotalSeconds);
Console.WriteLine("HH:mm:ss --> " + ((d1 - (d1 % 3600)) / 3600 + ":" + (((d1 - (d1 % 60))) / 60) % 60 + ":" + (d1 % 60)));

hasilnya:

Jika diperhatikan, ada sedikit perbedaan dalam hal ketelitian ketika menggunakan DateDiff dan TimeSpan, tetapi hasil akhirnya (dalam jam:menit:detik) tetap sama. Dan ini sesuai dengan yang saya butuhkan.

Tambahan:
Sebenarnya dengan TimeSpan, untuk mendapatkan selisih jam, menit detik tidak perlu repot-repot menghitung total detik dengan rumus di code diatas. Cukup dengan kode

Span.ToString()

akan mendapatkan hasil dengan format day.HH:mm:ss.

Semoga bermanfaat. Happy coding.

Iklan

SQL Server: Memodifikasi Kolom Yang Merupakan References Key

Tahun baru… dapat ilmu baru. Kebetulan di projek yang sedang aku kerjakan, ada perubahan yang harus dilakukan di database. Pengetahuan saya mengenai query database hanya sebatas, SELECT, UPDATE dan DELETE yang sederhana. Untuk query selain itu, saya biasanya minta tolong pada DBA atau menggunakan wizard dari SQL server.

Kebetulan, saya harus memodifikasi kolom di database, tapi kolom tersebut merupakan referensi untuk tabel yang lain. Karena ini merupakan masalah sepele dan kebetulan DBA masih sibuk, saya coba menggunakan wizard, tapi…. GAGAL. 😦 . Selalu muncul pesan, bahwa tabel tidak bisa di ubah….
Akhirnya bantuan dari DBA datang, dan aku diberi petunjuk untuk membereskan masalahku. Daripada lupa, aku catat saya di sini.
Siapa tau nanti diperlukan lagi. Read the rest of this entry