Tuesday, January 28, 2025

.::: Script Shell to collect differential time using epoch & human time in Centos 8 :::.

 

A. Script dengan time

1. Pengurangan dalam format human time

[root@teguhth temp]# cat start_finish_time.sh
#!/bin/bash

# Menyimpan waktu mulai dalam format manusiawi
datex=$(date "+%Y-%m-%d %H:%M:%S.%N")
epoch_start=$(date +%s%N)
echo "trial time"

# Menyimpan waktu selesai dalam format manusiawi
datey=$(date "+%Y-%m-%d %H:%M:%S.%N")
epoch_end=$(date +%s%N)

# Menyimpan waktu mulai dan selesai dalam nanodetik (epoch) untuk perhitungan

# Menghitung selisih waktu dalam nanodetik
finish=$((epoch_end - epoch_start))

# Konversi nanodetik ke detik (opsional)
finish_seconds=$(echo "scale=9; $finish / 1000000000" | bc)

# Output hasil
echo "start $datex and end $datey selama $finish nanoseconds ($finish_seconds seconds)"
echo ""
echo "Copyright by           : Teguh Triharto"
echo "Website                : https://www.linkedin.com/in/teguhth"
echo ""

[root@teguhth temp]#
 


2. Pengurangan dalam format epoch time
[root@teguhth temp]# cat start_finish_epoch.sh
#!/bin/bash

# Menyimpan waktu mulai dalam nanodetik (epoch)
datex=$(date +%s%N)

echo "trial time"

# Menyimpan waktu selesai dalam nanodetik (epoch)
datey=$(date +%s%N)

# Menghitung selisih waktu dalam nanodetik
finish=$((datey - datex))

# Konversi nanodetik ke detik (opsional)
finish_seconds=$(echo "scale=9; $finish / 1000000000" | bc)

# Output hasil
echo "start $datex and end $datey selama $finish nanoseconds ($finish_seconds seconds)"
echo ""
echo "Copyright by           : Teguh Triharto"
echo "Website                : https://www.linkedin.com/in/teguhth"
echo ""

[root@teguhth temp]#

 

3. Convert Nano to second

[root@teguhth temp]# cat convert_nano_time.sh
#!/bin/bash

# Epoch time dalam nanodetik (contoh, Anda bisa menggantinya sesuai kebutuhan)
epoch_nano=1736922091765624095

# Memisahkan detik dan nanodetik
epoch_sec=$((epoch_nano / 1000000000))   # Bagian detik
nano_fraction=$((epoch_nano % 1000000000)) # Bagian nanodetik

# Konversi epoch detik ke format waktu manusiawi (YYYY-MM-DD HH:MM:SS)
human_time=$(date -d @"$epoch_sec" "+%Y-%m-%d %H:%M:%S")

# Menggabungkan format waktu manusiawi dengan nanodetik
human_time_with_nano="${human_time}.$nano_fraction"

# Output hasil
echo "Epoch nanodetik: $epoch_nano"
echo "Waktu manusiawi: $human_time_with_nano"
echo ""
echo "Copyright by           : Teguh Triharto"
echo "Website                : https://www.linkedin.com/in/teguhth"
echo ""

[root@teguhth temp]#

 

B. Scipt dengan with differentiation time

1. pengurangan waktu equivalent

[root@teguhth data]# cat start_finish_diff_equiv.sh
#!/bin/bash

# Menyimpan waktu mulai dalam format manusiawi
datex=$(date "+%Y-%m-%d %H:%M:%S.%N")
epoch_start=$(date +%s%N)
echo "trial time"

########

# Fungsi untuk menampilkan tampilan waiting
function show_waiting_page {
    echo "Please wait while the process is running..."
    while true; do
        echo -n "."
        sleep 1
    done
}

# Menjalankan proses dalam background (simulasi proses)
function run_process {
    echo "Simulating a long process..."
    sleep 70  # Ganti dengan perintah nyata yang memerlukan waktu lama
}

# Menampilkan waiting page dalam background
show_waiting_page &
waiting_pid=$!

# Menjalankan proses utama
run_process

# Menghentikan tampilan waiting setelah proses selesai
kill $waiting_pid

echo -e "\nProcess completed successfully!"

###########

# Menyimpan waktu selesai dalam format manusiawi
datey=$(date "+%Y-%m-%d %H:%M:%S.%N")
epoch_end=$(date +%s%N)

# Menghitung selisih waktu dalam nanodetik
finish=$((epoch_end - epoch_start))

# Konversi nanodetik ke detik
finish_seconds=$(echo "scale=9; $finish / 1000000000" | bc)

# Menghitung tahun, bulan, hari, jam, menit, dan detik
years=$(echo "$finish_seconds / 31536000" | bc)  # 1 tahun = 31536000 detik
remaining_seconds=$(echo "$finish_seconds % 31536000" | bc)

months=$(echo "$remaining_seconds / 2592000" | bc)  # 1 bulan = 2592000 detik
remaining_seconds=$(echo "$remaining_seconds % 2592000" | bc)

days=$(echo "$remaining_seconds / 86400" | bc)  # 1 hari = 86400 detik
remaining_seconds=$(echo "$remaining_seconds % 86400" | bc)

hours=$(echo "$remaining_seconds / 3600" | bc)  # 1 jam = 3600 detik
remaining_seconds=$(echo "$remaining_seconds % 3600" | bc)

minutes=$(echo "$remaining_seconds / 60" | bc)  # 1 menit = 60 detik
remaining_seconds=$(echo "$remaining_seconds % 60" | bc)

seconds=$remaining_seconds

# Output hasil
echo "start $datex and end $datey selama $finish nanoseconds ($finish_seconds detik)"
echo "Equivalent time: $years tahun, $months bulan, $days hari, $hours jam, $minutes menit, $seconds detik"
echo ""
echo "Copyright by           : Teguh Triharto"
echo "Website                : https://www.linkedin.com/in/teguhth"
echo ""

[root@teguhth data]#

 

2. pengurangan waktu equivalent date n time

[root@teguhth data]# cat start_finish_diff_time.sh
#!/bin/bash

# Menyimpan waktu mulai dalam format manusiawi
datex=$(date "+%Y-%m-%d %H:%M:%S.%N")
epoch_start=$(date +%s%N)
echo "trial time"

########

# Fungsi untuk menampilkan tampilan waiting
function show_waiting_page {
    echo "Please wait while the process is running..."
    while true; do
        echo -n "*"
        sleep 1
    done
}

# Menjalankan proses dalam background (simulasi proses)
function run_process {
    echo "Simulating a long process..."
    sleep 70  # Ganti dengan perintah nyata yang memerlukan waktu lama
}

# Menampilkan waiting page dalam background
show_waiting_page &
waiting_pid=$!

# Menjalankan proses utama
run_process

# Menghentikan tampilan waiting setelah proses selesai
kill $waiting_pid

echo -e "\nProcess completed successfully!"

###########

# Menyimpan waktu selesai dalam format manusiawi
datey=$(date "+%Y-%m-%d %H:%M:%S.%N")
epoch_end=$(date +%s%N)

# Menghitung selisih waktu dalam nanodetik
finish=$((epoch_end - epoch_start))

# Konversi nanodetik ke detik menggunakan bc
finish_seconds=$(echo "scale=9; $finish / 1000000000" | bc)

# Menghitung hari, jam, menit, dan detik dari total detik menggunakan bc
days=$(echo "$finish_seconds / 86400" | bc)  # 1 hari = 86400 detik
remaining_seconds=$(echo "$finish_seconds % 86400" | bc)

hours=$(echo "$remaining_seconds / 3600" | bc)  # 1 jam = 3600 detik
remaining_seconds=$(echo "$remaining_seconds % 3600" | bc)

minutes=$(echo "$remaining_seconds / 60" | bc)  # 1 menit = 60 detik
seconds=$(echo "$remaining_seconds % 60" | bc)  # Menggunakan bc untuk menghitung detik

# Output hasil dengan format "tanggal dan waktu"
echo "start $datex and end $datey selama $finish nanoseconds ($finish_seconds detik)"
echo "Equivalent time: $days hari, $hours jam, $minutes menit, $seconds detik"
echo ""

# Konversi finish_seconds menjadi tanggal dan waktu dalam format yang lebih spesifik
#future_date=$(date -d "@$finish_seconds" "+%Y-%m-%d %H:%M:%S.%N")

# Durasi dalam detik (misalnya 70.011107888 detik)
duration_seconds=$finish_seconds

# Pisahkan detik dan pecahan detik
integer_seconds=$(echo "$duration_seconds" | cut -d '.' -f 1)  # Bagian utuh (detik)
fractional_seconds=$(echo "$duration_seconds" | cut -d '.' -f 2)  # Bagian pecahan detik

# Hitung jam, menit, dan detik
hours=$((integer_seconds / 3600))
minutes=$(((integer_seconds % 3600) / 60))
seconds=$((integer_seconds % 60))

# Format output
formatted_time=$(printf "%d:%02d:%02d.%s" "$hours" "$minutes" "$seconds" "$fractional_seconds")

echo "Tanggal dan waktu setelah $finish_seconds detik atau $formatted_time"
echo ""
echo "Copyright by           : Teguh Triharto"
echo "Website                : https://www.linkedin.com/in/teguhth"
echo ""

[root@teguhth data]#
 
3. Simple Script differential
 
[root@teguhth time]# sh simple_diff_time.sh
2020-03-22 08:34:10.002517536 ->>> Start Process
Simulating a long process...
Please wait while the process is running...
**********
Process completed successfully!
simple_diff_time.sh: line 42: 11436 Terminated              show_waiting_page
2025-01-31 08:34:07.183838778 ->>> Finish Process
Duration Process
Start     : 2020-03-22 08:34:10.002517536
Finish    : 2025-01-31 08:34:07.183838778
Duration 1 : 1775:23:59:57
Duration 2 : 4 Tahun, 10 Bulan, 15 Hari, 23:59:57

Copyright by           : Teguh Triharto
Website                : https://www.linkedin.com/in/teguhth

[root@teguhth time]#
[root@teguhth time]# cat simple_diff_time.sh
#!/bin/bash

# Menyimpan waktu mulai dalam format manusiawi
# For Test
# timedatectl set-time "2020-03-22 08:34:00"

datex=$(date "+%Y-%m-%d %H:%M:%S.%N")
#epoch_start='1580390912'
epoch_start=$(date +%s)  # Gunakan detik saja, jangan nanodetik
echo "$datex ->>> Start Process"

# For Test
# timedatectl set-time "2025-01-31 08:34:00"
# vmware-toolbox-cmd timesync enable

######## Script Begin ########

# Fungsi untuk menampilkan tampilan waiting
function show_waiting_page {
    echo "Please wait while the process is running..."
    while true; do
        echo -n "*"
        sleep 1
    done
}

# Menjalankan proses dalam background (simulasi proses)
function run_process {
    echo "Simulating a long process..."
    sleep 40  # Simulasi proses yang lebih lama
}

# Menampilkan waiting page dalam background
show_waiting_page &
waiting_pid=$!

# Menjalankan proses utama
run_process

# Menghentikan tampilan waiting setelah proses selesai
kill $waiting_pid

echo -e "\nProcess completed successfully!"

######## Script Finish ########

# Menyimpan waktu selesai dalam format manusiawi
datey=$(date "+%Y-%m-%d %H:%M:%S.%N")
epoch_end=$(date +%s)  # Gunakan detik saja
#epoch_end='1738253312'

echo "$datey ->>> Finish Process"

# Menghitung selisih waktu dalam detik
finish=$((epoch_end - epoch_start))

# Menghitung hari, jam, menit, dan detik
days=$((finish / 86400))
hours=$(((finish % 86400) / 3600))
minutes=$(((finish % 3600) / 60))
seconds=$((finish % 60))

# Konversi ke tahun, bulan, hari, jam, menit, dan detik
yearsx=$((finish / 31536000))             # 1 tahun = 365 * 24 * 3600 detik
remaining=$((finish % 31536000))

monthsx=$((remaining / 2592000))          # 1 bulan = 30 * 24 * 3600 detik
remaining=$((remaining % 2592000))

daysx=$((remaining / 86400))              # 1 hari = 86400 detik
remaining=$((remaining % 86400))

hoursx=$((remaining / 3600))              # 1 jam = 3600 detik
remaining=$((remaining % 3600))

minutesx=$((remaining / 60))              # 1 menit = 60 detik
secondsx=$((remaining % 60))

# Format output
formatted_time=$(printf "%d:%02d:%02d:%02d" "$days" "$hours" "$minutes" "$seconds")

# Format output
formatted_time2=$(printf "%d Tahun, %d Bulan, %d Hari, %02d:%02d:%02d" "$yearsx" "$monthsx" "$daysx" "$hoursx" "$minutesx" "$secondsx")

echo "Duration Process"
echo "Start     : $datex"
echo "Finish    : $datey"
echo "Duration 1 : $formatted_time"
echo "Duration 2 : $formatted_time2"
echo ""
echo "Copyright by           : Teguh Triharto"
echo "Website                : https://www.linkedin.com/in/teguhth"
echo ""

[root@teguhth time]#


 

4. For Testing to get data
 
Open Console 1
[root@teguhth time]# timedatectl set-time "2020-03-22 08:34:00"
[root@teguhth time]#
[root@teguhth time]# sh simple_diff_time.sh
2020-03-22 08:34:31.765374895 ->>> Start Process
Simulating a long process...
Please wait while the process is running...
**********
Process completed successfully!
simple_diff_time.sh: line 42:  3742 Terminated              show_waiting_page
2025-01-31 08:34:07.001188793 ->>> Finish Process
Duration Process
Start     : 2020-03-22 08:34:31.765374895
Finish    : 2025-01-31 08:34:07.001188793
Duration 1 : 1775:23:59:36
Duration 2 : 4 Tahun, 10 Bulan, 15 Hari, 23:59:36

Copyright by           : Teguh Triharto
Website                : https://www.linkedin.com/in/teguhth

[root@teguhth time]#
 
Open Console 2 ( run before finish simple_diff_time.sh)
timedatectl set-time "2025-01-31 08:34:00"
 
5. Simple test duration
 
[root@teguhth time]# cat simple_duration.sh
#!/bin/bash
epoch_start=$(date +%s)  # Gunakan detik saja, jangan nanodetik

######## Script Begin ########

# Fill Script to check ###

######## Script Finish ########

# Menyimpan waktu selesai dalam format manusiawi
epoch_end=$(date +%s)  # Gunakan detik saja

# Menghitung selisih waktu dalam detik
finish=$((epoch_end - epoch_start))

# Menghitung hari, jam, menit, dan detik
days=$((finish / 86400))
hours=$(((finish % 86400) / 3600))
minutes=$(((finish % 3600) / 60))
seconds=$((finish % 60))

# Format output
formatted_time=$(printf "%d:%02d:%02d:%02d" "$days" "$hours" "$minutes" "$seconds")

echo "Duration Process"
echo "Duration : $formatted_time"
echo ""
echo "Copyright by           : Teguh Triharto"
echo "Website                : https://www.linkedin.com/in/teguhth"
echo ""
[root@teguhth time]#

 



No comments:

Post a Comment

Popular Posts