Skip to content

Instantly share code, notes, and snippets.

@yazilimperver
Last active November 9, 2020 20:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yazilimperver/14351a5fe3bd3bb781e468721ad77bcd to your computer and use it in GitHub Desktop.
Save yazilimperver/14351a5fe3bd3bb781e468721ad77bcd to your computer and use it in GitHub Desktop.
Haftalik C++ 33 - Modern Timstamp
// Orjinal yazı için: https://www.yazilimperver.com/index.php/2020/11/09/haftalik-c-33-zaman-bilgisi-etiketi/
// For original post: https://www.yazilimperver.com/index.php/2020/11/09/haftalik-c-33-zaman-bilgisi-etiketi/
#include "Timestamp.h"
// Asagida ihtiyac duyuacaginiz baslik dosyalarini görebilirsiniz
#include <chrono>
#include <ctime>
#include <iomanip>
#include <sstream>
#include <string>
// Çok basit bir şekilde Epoch anindan bu yana geçen zamanı milisaniye cinsinden almak için
uint64_t Timestamp::getTimestampInMsec()
{
using namespace std::chrono;
return duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
}
// Bu da mevcut zamanı daha güzel ifade etmek icin stringe çeviren bir metot
std::string Timestamp::getTimeString()
{
using namespace std::chrono;
system_clock::time_point p = system_clock::now();
std::time_t t = system_clock::to_time_t(p);
// ref: http://www.cplusplus.com/reference/ctime/ctime/
std::string result = std::ctime(&t);
return result;
}
// Bu fonksiyon biraz daha sayisal ve kayıtlar icin uygun bir format sunuyor bizlere
// Format şu şekilde "2020-11-09 20:19:45.217"
std::string Timestamp::getDetailedTimeString()
{
using namespace std::chrono;
// Mevcut zamanı alalım
auto now = system_clock::now();
// Milisaniyeye çevirelim
auto timeInMsec = duration_cast<milliseconds>(now.time_since_epoch()).count();
// Zaman bilgisi içerisinde ilgili saniyeye ilişkin artık milisaniyeyi göstermek için
// kalanı bulalım
auto ms = timeInMsec % 1000;
// Elimizdeki zaman bilgisini time_t formatına çevirelim
std::time_t timer = system_clock::to_time_t(now);
// İlgili zamanı yerel zamana çevirelim
std::tm bt = *std::localtime(&timer);
// String'e çevirmek için string akış sınıfını kullanalım
std::ostringstream oss;
// Diger format seçenekleri için https://en.cppreference.com/w/cpp/io/manip/put_time
oss << std::put_time(&bt, "%F %H:%M:%S"); // HH:MM:SS
// Artık milisaniyeyi de ekleyelim
oss << '.' << std::setfill('0') << std::setw(3) << ms;
return oss.str();
}
// Bu fonksiyon bir önceki metodun aynısını verilen zaman için yapıyor. Özellikle çeşitli kanallar aracılığı
// ile edindiğiniz zaman bilgisini görselleştirmek için faydalı olabilir
std::string Timestamp::getDetailedTimeString(uint64_t msec)
{
using namespace std::chrono;
// Mevcut zamanı alalım
auto now = system_clock::now();
// Milisaniyeye çevirelim
auto timeInMsec = msec;
// Zaman bilgisi içerisinde ilgili saniyeye ilişkin artık milisaniyeyi göstermek için
// kalanı bulalım
auto ms = timeInMsec % 1000;
// Elimizdeki zaman bilgisini time_t formatına çevirelim
std::time_t timer = static_cast<std::time_t>(timeInMsec/1000);
// İlgili zamanı yerel zamana çevirelim
std::tm bt = *std::localtime(&timer);
// String'e çevirmek için string akış sınıfını kullanalım
std::ostringstream oss;
// Diger format seçenekleri için https://en.cppreference.com/w/cpp/io/manip/put_time
oss << std::put_time(&bt, "%F %H:%M:%S"); // HH:MM:SS
// Artık milisaniyeyi de ekleyelim
oss << '.' << std::setfill('0') << std::setw(3) << ms;
return oss.str();
}
// Orjinal yazı için: https://www.yazilimperver.com/index.php/2020/11/09/haftalik-c-33-zaman-bilgisi-etiketi/
// For original post: https://www.yazilimperver.com/index.php/2020/11/09/haftalik-c-33-zaman-bilgisi-etiketi/
#pragma once
#include <cstdint>
#include <string>
class Timestamp
{
public:
// Basit bir şekilde Epoch anindan bu yana geçen zamanı milisaniye cinsinden almak için
static uint64_t getTimestampInMsec();
// Asagidaki fonksiyon mevcut zamanı (Tue Sep 27 14:21:13 2011) formatında doner
static std::string getTimeString();
// Bu fonksiyon, mevcut zaman bilgisini biraz daha sayısal ve kayıtlar icin uygun bir formatta sunuyor bizlere
// Format şu şekilde "2020-11-09 20:19:45.217"
static std::string getDetailedTimeString();
// Bu fonksiyon bir önceki metodun aynısını verilen zaman için yapıyor. Özellikle çeşitli kanallar aracılığı
// ile edindiğiniz zaman bilgisini görselleştirmek için faydalı olabilir
static std::string getDetailedTimeString(uint64_t msec);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment