• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak sprawdzić, czy liczba sekund od 1970 roku jest w obecnym tygodniu?

Object Storage Arubacloud
0 głosów
339 wizyt
pytanie zadane 14 października 2018 w C i C++ przez Huberti Gaduła (4,500 p.)

Witam. Jak sprawdzić, czy podana wartość sekund od 1970 roku jest w tym samym tygodniu, co obecna liczba sekund od 1970 roku pobrana za pomocą funkcji std::time(NULL)?

Otóż kod ma wyświetlać datę na podstawie podanej liczby sekund od roku 1970. Chciałbym wyświetlać datę w podobny sposób, jak robi to messenger. Jeżeli wiadomość wysłana dzisiaj pokazuj godzinę, minuty i sekundy. Jeżeli wiadomość wysłana wczoraj pokazuj wczoraj. Jeżeli wiadomość wysłana w tym tygodniu pokazuj dzień tygodnia...

I teraz właśnie tutaj napotkałem problem, jak sprawdzić, czy podana liczba sekund od 1970 roku jest w tym samym tygodniu (czyli w zakresie poniedziałek godzina 00:00:00 - niedziela 23:59:59), co obecna liczba sekund od 1970 roku pobrana za pomocą funkcji std::time(NULL)?

#pragma once

#include <ctime>

class DateConsoleOutputStream;

class Date
{
public:
	Date(std::time_t secondsFromYear1970 = 0);

	void set(std::time_t secondsFromYear1970);

	void setCurrentLocalTime();

	bool isToday() const;

	bool isYesterday() const;

	// TODO isThisWeek

	bool isThisMonth() const;

	bool isThisYear() const;

private:
	std::tm time;

	std::tm getCurrentLocalTime() const;

	friend class DateConsoleOutputStream;
};

class DateConsoleOutputStream
{
public:
	void showHour(const Date& date) const;

	void showMinutes(const Date& date) const;

	void showSeconds(const Date& date) const;

	void showDayOfWeek(const Date& date) const;

	void showDayOfMonth(const Date& date) const;

	void showMonth(const Date& date) const;

	void showYear(const Date& date) const;
};
#include "Date.h"
#include <iostream>

Date::Date(std::time_t secondsFromYear1970)
{
	localtime_s(&this->time, &secondsFromYear1970);
}

void Date::set(std::time_t secondsFromYear1970)
{
	localtime_s(&this->time, &secondsFromYear1970);
}

void Date::setCurrentLocalTime()
{
	std::time_t currentTimeInSecondsFromYear1970 = std::time(NULL);
	localtime_s(&time, &currentTimeInSecondsFromYear1970);
}

bool Date::isToday() const
{
	std::tm currentTime = getCurrentLocalTime();

	return isThisYear() && currentTime.tm_yday == time.tm_yday;
}

bool Date::isYesterday() const
{
	std::tm currentTime = getCurrentLocalTime();

	return isThisYear() && currentTime.tm_yday - 1 == time.tm_yday;
}

bool Date::isThisMonth() const
{
	std::tm currentTime = getCurrentLocalTime();

	return isThisYear() && currentTime.tm_mon == time.tm_mon;
}

bool Date::isThisYear() const
{
	std::tm currentTime = getCurrentLocalTime();

	return currentTime.tm_year == time.tm_year;
}

std::tm Date::getCurrentLocalTime() const
{
	std::time_t currentTimeInSeconds = std::time(NULL);
	std::tm currentTime;
	localtime_s(&currentTime, &currentTimeInSeconds);

	return currentTime;
}

void DateConsoleOutputStream::showHour(const Date& date) const
{
	if (date.time.tm_hour < 10)
		std::cout << "0";
	std::cout << date.time.tm_hour;
}

void DateConsoleOutputStream::showMinutes(const Date& date) const
{
	if (date.time.tm_min < 10)
		std::cout << "0";
	std::cout << date.time.tm_min;
}

void DateConsoleOutputStream::showSeconds(const Date& date) const
{
	if (date.time.tm_sec < 10)
		std::cout << "0";
	std::cout << date.time.tm_sec;
}

void DateConsoleOutputStream::showDayOfWeek(const Date& date) const
{
	enum DAYS_OF_WEEK { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY };
	switch (date.time.tm_wday)
	{
	case SUNDAY:
		std::cout << "Niedziela";
		break;
	case MONDAY:
		std::cout << "Poniedzialek";
		break;
	case TUESDAY:
		std::cout << "Wtorek";
		break;
	case WEDNESDAY:
		std::cout << "Sroda";
		break;
	case THURSDAY:
		std::cout << "Czwartek";
		break;
	case FRIDAY:
		std::cout << "Piatek";
		break;
	case SATURDAY:
		std::cout << "Sobota";
		break;
	}
}

void DateConsoleOutputStream::showDayOfMonth(const Date& date) const
{
	if (date.time.tm_mday < 10)
		std::cout << "0";
	std::cout << date.time.tm_mday;
}

void DateConsoleOutputStream::showMonth(const Date& date) const
{
	if (date.time.tm_mon + 1 < 10)
		std::cout << "0";
	std::cout << date.time.tm_mon + 1;
}

void DateConsoleOutputStream::showYear(const Date& date) const
{
	std::cout << date.time.tm_year + 1900;
}

W skrócie: jak napisać funkcję isThisWeek()?

1 odpowiedź

0 głosów
odpowiedź 14 października 2018 przez adrian17 Ekspert (344,860 p.)

liczba sekund od 1970 roku

W skrócie: (unixowy) timestamp :)

Tu jest jeden przykład: http://www.cplusplus.com/forum/general/220155/#msg1013043

Mógłbyś też użyć %W w strftime i porównać stringi.

Podobne pytania

0 głosów
0 odpowiedzi 1,022 wizyt
pytanie zadane 11 marca 2017 w PHP przez BjoTrek Nowicjusz (180 p.)
0 głosów
4 odpowiedzi 5,822 wizyt
pytanie zadane 12 września 2016 w Egzaminy zawodowe przez Kenzy Obywatel (1,160 p.)
0 głosów
3 odpowiedzi 1,840 wizyt
pytanie zadane 4 czerwca 2015 w Java przez Filipek Nowicjusz (210 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...