Last active
November 9, 2020 20:33
-
-
Save yazilimperver/14351a5fe3bd3bb781e468721ad77bcd to your computer and use it in GitHub Desktop.
Haftalik C++ 33 - Modern Timstamp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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