ফর্ম্যাটে সি মুদ্রণ সময় সবচেয়ে ভাল পদ্ধতি কি 2009‐08‐10
18:17:54.811
?
ফর্ম্যাটে সি মুদ্রণ সময় সবচেয়ে ভাল পদ্ধতি কি 2009‐08‐10
18:17:54.811
?
উত্তর:
স্ট্রফটাইম () ব্যবহার করুন ।
#include <stdio.h>
#include <time.h>
int main()
{
time_t timer;
char buffer[26];
struct tm* tm_info;
timer = time(NULL);
tm_info = localtime(&timer);
strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
puts(buffer);
return 0;
}
মিলিসেকেন্ড অংশের জন্য, এই প্রশ্নটি একবার দেখুন। এএনএসআই সি ব্যবহার করে মিলি সেকেন্ডে সময় কীভাবে পরিমাপ করা যায়?
time(&timer)
হওয়া উচিত timer = time(NULL);
। The tloc argument is obsolescent and should always be NULL in new code. When tloc is NULL, the call cannot fail.
উপরের উত্তরগুলি পুরোপুরি প্রশ্নের উত্তর দেয় না (বিশেষত মিলিসেক অংশ)। এর আমার সমাধানটি হ'ল স্ট্রফটাইমের আগে গেটটাইম ডে ব্যবহার করা। মিলিসেকের জন্য "1000" এড়াতে যত্নের নোট করুন। এটি হামিদ নাজারির উত্তরের ভিত্তিতে তৈরি।
#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#include <math.h>
int main() {
char buffer[26];
int millisec;
struct tm* tm_info;
struct timeval tv;
gettimeofday(&tv, NULL);
millisec = lrint(tv.tv_usec/1000.0); // Round to nearest millisec
if (millisec>=1000) { // Allow for rounding up to nearest second
millisec -=1000;
tv.tv_sec++;
}
tm_info = localtime(&tv.tv_sec);
strftime(buffer, 26, "%Y:%m:%d %H:%M:%S", tm_info);
printf("%s.%03d\n", buffer, millisec);
return 0;
}
gettimeofday
উইন্ডোজ বাস্তবায়নে উপলভ্য নয়
time.h
একটি strftime
ফাংশন সংজ্ঞা দেয় যা আপনাকে time_t
এমন কিছু ব্যবহার করে একটি পাঠ্য উপস্থাপনা দিতে পারে:
#include <stdio.h>
#include <time.h>
int main (void) {
char buff[100];
time_t now = time (0);
strftime (buff, 100, "%Y-%m-%d %H:%M:%S.000", localtime (&now));
printf ("%s\n", buff);
return 0;
}
তবে এটি আপনাকে সাব-সেকেন্ড রেজোলিউশন দেয় না কারণ এটি কোনও থেকে পাওয়া যায় না time_t
। এটি ফলাফল:
2010-09-09 10:08:34.000
যদি আপনি সত্যিই চশমা দ্বারা সীমাবদ্ধ থাকেন এবং দিন এবং ঘন্টাগুলির মধ্যে স্থান না চান তবে কেবল বিন্যাসের স্ট্রিং থেকে এটি সরিয়ে দিন।
মাইক্রোসেকেন্ড যথার্থতার সাথে নিম্নলিখিত কোডের মুদ্রণগুলি। আমাদের যা করতে হবে তা হল বিল্ড স্ট্রিং ব্যবহার gettimeofday
এবং strftime
চালু tv_sec
এবং সংযোজন tv_usec
।
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
int main(void) {
struct timeval tmnow;
struct tm *tm;
char buf[30], usec_buf[6];
gettimeofday(&tmnow, NULL);
tm = localtime(&tmnow.tv_sec);
strftime(buf,30,"%Y:%m:%dT%H:%M:%S", tm);
strcat(buf,".");
sprintf(usec_buf,"%dZ",(int)tmnow.tv_usec);
strcat(buf,usec_buf);
printf("%s",buf);
return 0;
}
আপনি ব্যবহার করতে পারেন strftime
, তবে struct tm
কয়েক সেকেন্ডের জন্য রেজোলিউশন নেই। এটি নিশ্চিতভাবে আপনার প্রয়োজনের জন্য প্রয়োজন কিনা তা আমি নিশ্চিত নই।
struct tm tm;
/* Set tm to the correct time */
char s[20]; /* strlen("2009-08-10 18:17:54") + 1 */
strftime(s, 20, "%F %H:%M:%S", &tm);
কৌশল:
int time_len = 0, n;
struct tm *tm_info;
struct timeval tv;
gettimeofday(&tv, NULL);
tm_info = localtime(&tv.tv_sec);
time_len+=strftime(log_buff, sizeof log_buff, "%y%m%d %H:%M:%S", tm_info);
time_len+=snprintf(log_buff+time_len,sizeof log_buff-time_len,".%03ld ",tv.tv_usec/1000);
এই পৃষ্ঠার কোনও সমাধানই আমার পক্ষে কাজ করেনি, আমি সেগুলি মিশ্রিত করেছি এবং তাদের উইন্ডোজ এবং ভিজ্যুয়াল স্টুডিও 2019 এর সাথে কাজ করতে প্রস্তুত করেছি, এখানে কীভাবে:
#include <Windows.h>
#include <time.h>
#include <chrono>
static int gettimeofday(struct timeval* tp, struct timezone* tzp) {
namespace sc = std::chrono;
sc::system_clock::duration d = sc::system_clock::now().time_since_epoch();
sc::seconds s = sc::duration_cast<sc::seconds>(d);
tp->tv_sec = s.count();
tp->tv_usec = sc::duration_cast<sc::microseconds>(d - s).count();
return 0;
}
static char* getFormattedTime() {
static char buffer[26];
// For Miliseconds
int millisec;
struct tm* tm_info;
struct timeval tv;
// For Time
time_t rawtime;
struct tm* timeinfo;
gettimeofday(&tv, NULL);
millisec = lrint(tv.tv_usec / 1000.0);
if (millisec >= 1000)
{
millisec -= 1000;
tv.tv_sec++;
}
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime(buffer, 26, "%Y:%m:%d %H:%M:%S", timeinfo);
sprintf_s(buffer, 26, "%s.%03d", buffer, millisec);
return buffer;
}
ফলাফল :
2020: 08: 02 06: 41: 59.107
2020: 08: 02 06: 41: 59.196