Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/35: Рейтинг темы: голосов - 35, средняя оценка - 4.77
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30

Аналог типа time_t в Си++ или Borland'е

11.12.2010, 16:51. Показов 6974. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как называется аналог типа time_t в Си++ или Borland'е? Мне нужен именно тот тип, который меряет количество секунд (от 1970 года вроде). И как называется интерфейс для получения текущего значения (аналог функции time())?
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2010, 16:51
Ответы с готовыми решениями:

Конветирование строки char в time_t или в struct tm
Есть строковые переменные типа char над которыми нужно производить вычисления (сравнение, получение разницы). Порыл сеть на предмет как...

Аналог типа Record в С#
Здравствуйте, я вот потихоньку изучаю язык С# и параллельно экспериментирую с кодом. Но вот столкнулся с такой проблемой: есть кусочек кода...

Как подключить аналог jquery или джаваскрипт, но только используя VB или С++?
как можно(где почитать) как подключить аналог jquery или джаваскрипт но только используя V B или С++? (проблема в том что php языки...

8
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
22.05.2013, 14:22
TDateTime используется для спецификации переменных даты и времени. C++Builder реализует этот встроенный тип Delphi как одноименный класс, который инкапсулирует член данных типа double, содержащий значение даты в целой части числа, а значение времени в мантиссе (считая от полудня 30 декабря 1899 года). В следующей таблице приведены значения переменной типа TDateTime и их эквиваленты в выражениях даты и времени:
Значение Дата Время Примечания
0 12/30/1899 12:00 +0 дней, +0 часов
2.75 01/01/1900 18:00 +2 дня, +6 часов
-1.25 12/29/1899 06:00 -1 день, -б часов
35065 01/01/1996 12:00 +35065 дней, +0 часов


Чтобы вычислить дробное число дней, прошедших между двумя датами, вычтите второе значение из первого. Чтобы перейти к следующему дню, сохранив время, просто добавьте 1 к текущему значению.

C++
1
2
3
4
5
6
7
8
9
10
TDateTime t1 = TDateTime(1.0/(24*3600)); // Одна секунда
TDateTime t2 = Time(); // Текущее время
TDateTime t3 = Date(); // Текущая дата
TDateTime t4 = TDateTime(); // Текущие дата и время
 
t4 = TDateTime(Now());
float CurrTimeCount = t4.Val; // Текущие дата и время в виде значения с плавающей точкой,
                              // содержащий сумму прошедших дней в целой части числа,
                              //   а значение времени в мантиссе (в контексте, что 0,25 == 6 часов, 0,5 == 12 часов..)
                              //   (считая от полудня 30 декабря 1899 года)
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
22.05.2013, 21:03  [ТС]
2.75 - это +2 дня +18 часов. Т.е. это по идее 2 января 1900 года 06:00. Так?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.05.2013, 21:27
В общем Date and Time Support

Разница в секундах между датами SecondsBetween

Текущая дата Now()
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
22.05.2013, 21:29
Evg,
Цитата Сообщение от Evg Посмотреть сообщение
2.75 - это +2 дня +18 часов. Т.е. это по идее 2 января 1900 года 06:00. Так?
По факту 2.75 это 01.01.1990 18:00 (+2 дня +18 часов), т.е получается, что счет идет от 00:00 (30.12.1899), а не от 12:00 ("полудня").

А вот с вычитанием вот так:

-1.25 это 29.12.1899 6:00, т.е. целая часть вычитается согласно дням (-1 день), а вот мантисса (время) плюсуется (от 00:00, т.е. + 6 часов (0.25 от 24)).
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.05.2013, 21:39
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <DateUtils.hpp>
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TDateTime d= 2.75;
 Memo1->Lines->Add( d.DateTimeString() );
 Memo1->Lines->Add( DaysBetween(  d.DateTimeString(), TDateTime() ) );
 Memo1->Lines->Add( HoursBetween( d.DateTimeString(), TDateTime() ) );
 Memo1->Lines->Add( SecondsBetween( d.DateTimeString(), TDateTime() ) );
 Memo1->Lines->Add( Now().DateTimeString() );
}
//---------------------------------------------------------------------------
Вывод :
01.01.1900 18:00:00
2
66
237600
22.05.2013 20:43:59
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
23.05.2013, 00:21
Цитата Сообщение от Evg Посмотреть сообщение
тип, который меряет количество секунд (от 1970 года вроде)
если подразумевается UTC, тогда, возможно, это:
A UTC TDateTime function

By Mark G. Wiseman

If you read part 1 of my series of articles Hidden treasures of Sysutils, you know that both the TDateTime class and the Sysutils namespace in the VCL contain a rich selection of time and date functions.

However, there is one function I recently needed that was not in the VCL. I needed a function that returned a TDateTime object with the current system time. In the 32-bit Windows operating systems, the system time is Coordinated Universal Time, not the local time.

What is Coordinated Universal Time and why would I want to use it? Coordinated Universal Time (which for some reason I don’t understand is abbreviated UTC) was called Greenwich Mean Time (GMT) until 1972. It is still referred to as “Zulu Time”, in some military organizations. UTC is the international standard for representing time.

UTC makes comparing times much easier. In the application where I use UTC, I am logging events in a client/server program. These events are occurring on clients that can be spread across several time zones. In order to understand the correct chronological order of the events all the times are logged as UTC.

As it turns out, returning the UTC time as a TDateTime object was fairly easy after I did some investigative work. I found that the Windows API function, GetSystemTime(), fills a SYSTEMTIME struct with the system date and time. Unfortunately there is no VCL equivalent that returns this time in a TDateTime object. However, the VCL function, SystemTimeToDateTime(), converts a SYSTEMTIME struct to a TDateTime object. This was all I needed to create the SystemDateTime() function. Here’s how that function looks:
C++
1
2
3
4
5
6
TDateTime SystemDateTime()
{
  SYSTEMTIME systemTime;
  GetSystemTime(&systemTime);
  return (SystemTimeToDateTime(systemTime));
}
This simple function allows me to deal with UTC times in a familiar TDateTime object.

If you have a further interest in UTC and date and time standards, here are two Web sites you should look at:
www.cl.cam.ac.uk/~mgk25/iso-time.html
www.iso.ch/markete/8601.pdf
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
23.05.2013, 11:29
Цитата Сообщение от The_Immortal Посмотреть сообщение
т.е получается, что счет идет от 00:00 (30.12.1899), а не от 12:00 ("полудня").
Вот да. По факту отсчет идет от нуля часов, но везде пишут, что от полудня. Может это при переводе у них какие-нибудь недопонимания произошли с АМ/РМ.

Avazart, это все здорово. Спасибо. Но
Avazart, The_Immortal, LK, более интересно как с математической точки зрения происходит сам перевод. Перевод дробной части в часы/секунды.
0.25 это все красиво - ровно шесть часов. Круто. Но как на счет 0.041671? Или 0.041672? Что из этого один час? И почему?
Есть ли какая-нибудь формула перевода из дробной части (даже представленной как целое) в часы или минуты? Дни как переводятся? 41417.0 это 41417/365=113(,47...) => 1899 + 113 = 2012. Учитывая високосные года получим приблизительно плюс 28 дней. Остаток (~0,47) же, если принять за целую единицу год, будет 0,47*1,2=0,564, где 1,2 это коэффициент перевода из десятичной системы в двенадцатеричную. Получаем 0,564 - это пятый месяц, чуть дальше за середину. Сегодня 23.05.2013 (что равно 41417), а по логике получилось где-то 19.05.2012. Или с високосными днями уже вообще лето.
Вопрос все тот же - какая правильная формула перевода?

Цитата Сообщение от LK Посмотреть сообщение
C++
1
TDateTime SystemDateTime() { SYSTEMTIME systemTime; GetSystemTime(&systemTime); return (SystemTimeToDateTime(systemTime)); }
Класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
TDateTime SystemDateTime()
{
  SYSTEMTIME systemTime;
  GetSystemTime(&systemTime);
  return (SystemTimeToDateTime(systemTime));
}
//------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Add(SystemDateTime());
Memo1->Lines->Add(Now());
}
Code
1
2
3
Результат:
23.05.2013 7:23:20
23.05.2013 11:23:20 (где часовой пояс установлен на +4)

P.S. Кстати ссылки не работают.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
23.05.2013, 15:31
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Кстати ссылки не работают.
кстати, мысль не посещала, что надо забыть о редиректе ссылок на форуме и просто скопировать ссылку и вставить в новое окно, потом нажать ентер, и получить:
A summary of the international standard date and time notation

by Markus Kuhn

International Standard ISO 8601 specifies numeric representations of date and time. This standard notation helps to avoid confusion in international communication caused by the many different national notations and increases the portability of computer user interfaces. In addition, these formats have several important advantages for computer usage compared to other traditional date and time notations. The time notation described here is already the de-facto standard in almost all countries and the date notation is becoming increasingly popular.

Especially authors of Web pages and software engineers who design user interfaces, file formats, and communication protocols should be familiar with ISO 8601.

И дальше, по тексту...
? Остальной лирики я не понял .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.05.2013, 15:31
Помогаю со студенческими работами здесь

Аналог делфийского процедурного типа в C#
в делфи можно создать переменную которая может хранить адрес процедуры и через эту переменную можно вызывать эту процедуру. типа type ...

аналог типа strinng pascal в c++
Подскажите какой тип в си++ соответствует типу string в паскале

Аналог псевдонима имени переменной и типа
В С++ есть ссылки и typedef. Есть ли подобное в С#? Просто неудобно по сотне раз переписывать классы, которые содержат переменную, да и...

Есть ли аналог Contains, для данных типа datetime2?
Суть вопроса в том что у меня есть запрос к бд: BusinessTripTbs = new...

Множество аргументов неизвестного типа, аналог printf()
Я должен создать функцию, которая принимает неизвестное заранее количество аргументов, наподобии printf(). Как мне их объявить и как потом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru