0 / 0 / 0
Регистрация: 08.04.2010
Сообщений: 13
|
|
1 | |
арифметика со временем08.04.2010, 22:51. Показов 7170. Ответов 37
Метки нет (Все метки)
Помогите пожалуйста, мне нужно написать программу в которой есть 3 типа времени:
1 - время приезда 2 - время в пути 3 - время выезда чтобы было проще понять что мне нужно 3=1-2 я пробовал сравнивать данные из Edit'ов но ничего толкового не вышло... заранее благодарен
0
|
08.04.2010, 22:51 | |
Ответы с готовыми решениями:
37
Арифметика с датой и временем Как получить разницу между текущем временем и временем создания файла? Вычислить промежуток времени между текущей датой/временем и временем, введенным пользователем Определить интервал между текущим временем и временем до звонка |
0 / 0 / 0
Регистрация: 08.04.2010
Сообщений: 13
|
|
20.06.2010, 16:29 [ТС] | 21 |
в общем если считать так в июне 30 дней, если прибавить к 20.06.2010 1 месяц в 30 дней то оно и покажет 20.07.2010, а если считать с июля в котором 31 день - то оно выдаст не 20.08.2010, а 19.08.2010, если бы во всех месяцах было по 30 дней - небыло бы и проблем, а так получается +/- в 1-3 дня...
0
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
||||||
20.07.2010, 13:02 | 22 | |||||
Привет друзья. Поднимаю тему. Ребят, без вашей помощи ничего не получается. Мне нужно произвести вычитание одной даты из другой, не зная заранее формата даты и получая только дату из текстового лога. К примеру в логе есть такая строка(это дата сканирования системы и создания лога - это контрольное значение, из неё мы вычитаем дату создания файлов. Формат даты файлов аналогичен формату даты создания лога. DateScan хранит дату из LogDate)
Код
LogDate="7/17/2010 10:33:29 PM" Код
23.Oct.2008 21:35:48 23-Oct-2008 21:35:48 23/Oct/2008 21:35:48 23.Окт.2008 21:35:48 - с различными разделителями, вообще разделители не вопрос, можно StringReplace заменять на точку 26.12.2008 19:39:20 26-12-2008 19:39:20 26/12/2008 19:39:20 4/14/2008 5:42:20 AM - Здесь идёт первым месяц\дата\год Код
4/14/2008 5:42:20 AM - Здесь идёт первым месяц\дата\год Используемы код ниже
Спасибо.
0
|
55 / 55 / 5
Регистрация: 09.03.2009
Сообщений: 177
|
|
20.07.2010, 16:08 | 23 |
Ну для этого нужно привести к общему виду. У Вас конечное число форматов? Т.е. только такие, как в примере лога?
Если так, то задача немного упрощается, т.к. у Вас используются всего два формата 1) dd(разделитель)mm(разделитель)yyyy и 2) mm(разделитель)dd(разделитель)yyyy Остается только определить к какому формату (к 1 или 2) относиться запись. Как видно из лога американский формат имеет на конце приписку в виде AM или PM (4/14/2008 5:42:20 AM). Если это верно для всех записей в американском формате, то задача упрощается еще сильнее Далее, после того как определен формат, запись нужно привести к какому-либо стандартному виду (т.е. заменить разделители на нужные или вообще их убрать). Ну а когда даты приведены к одному общему виду, то уже можно с ними делать что угодно. Например, запись даты можно представить в виде 20100720. Тогда простой математической операцией (а именно вычитанием), можно определить прошел месяц или нет. Т.е. 20100720-20100620=100. Если ответ равен 100, то прошел месяц, если меньше 100 то месяц еще не прошел.
1
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|
20.07.2010, 16:39 | 24 |
В идеале, мне время даже не нужно, нужна только дата.
0
|
55 / 55 / 5
Регистрация: 09.03.2009
Сообщений: 177
|
|
20.07.2010, 16:54 | 25 |
Для таких случаев функции, которая занимается конвертацией даты, нужно передавать еще и параметр, который бы сказал ей, в каком формате эта дата. Вот в этом вся и сложность...
А в логе даты как идут? по порядку независимо от формата?
1
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|
20.07.2010, 17:18 | 26 |
Код
<ITEM PID="2816" File="c:\windows\system32\alg.exe" CheckResult="0" Descr="Application Layer Gateway Service" LegalCopyright="© Microsoft Corporation. All rights reserved." Hidden="0" CmdLine="C:\WINDOWS\System32\alg.exe" Size="44544" Attr="rsAh" CreateDate="4/14/2008 5:42:14 AM" ChageDate="4/14/2008 5:42:14 AM" MD5="8C515081584A38AA007909CD02020B3D" /> <ITEM PID="1200" File="c:\program files\alwil software\avast5\avastsvc.exe" CheckResult="0" Descr="avast! Service" LegalCopyright="Copyright (c) 2010 AVAST Software" Hidden="0" CmdLine="@quot;C:\Program Files\Alwil Software\Avast5\AvastSvc.exe@quot;" Size="40384" Attr="rsAh" CreateDate="4/29/2010 11:49:05 AM" ChageDate="6/28/2010 11:57:15 PM" MD5="B2386A8E66891F7CFEC9F5A03F0F1210" /> <ITEM PID="1608" File="c:\progra~1\alwils~1\avast5\avastui.exe" CheckResult="0" Descr="avast! Antivirus" LegalCopyright="Copyright (c) 2010 AVAST Software" Hidden="0" CmdLine="@quot;C:\PROGRA~1\ALWILS~1\Avast5\avastUI.exe@quot; /nogui" Size="2837864" Attr="rsAh" CreateDate="4/29/2010 11:49:05 AM" ChageDate="6/28/2010 11:57:18 PM" MD5="38AE7A942FC3FAB1C6A27EB65DE8F827" /> ... ... И так далее...
0
|
55 / 55 / 5
Регистрация: 09.03.2009
Сообщений: 177
|
|
21.07.2010, 08:41 | 27 |
Имелось ввиду даты в логе записаны в хронологическом порядке?
А вот как вы сами находите ответ на такой вопрос: По-моему ответить на такой вопрос можно, только анализируя предыдущие и следующие даты в логе. Думаю, что анализируя с десяток записей до и с десяток после можно таки сделать вывод в каком формате записана дата, конечно при условии, что даты записаны в хронологическом порядке (но все равно существует вероятность ошибки ). Т.е. примерно так: дата N должна быть больше даты N-1, дата N-1 больше даты N-2, и т.д. дата N должна быть меньше даты N+1, дата N+1 меньше даты N+2, и т.д.
1
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|
21.07.2010, 12:28 | 28 |
Но эти проверки увеличат время обработки в программе в несколько раз. Печально. Узнал что ещё существует японский формат времени, когда год впереди. Попробую подрезюмировать. Есть форматы: 1. Стандартный - День\Месяц\Год 2. Американский - Месяц\День\Год 3. Японский - Год\День\Месяц или Год\Месяц\День
0
|
Покинул форум
3187 / 1366 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
|
|
21.07.2010, 12:42 | 29 |
Maestro, определять что идет первым очень сложно:
0
|
55 / 55 / 5
Регистрация: 09.03.2009
Сообщений: 177
|
|
21.07.2010, 13:09 | 30 |
Полностью поддерживаю Maestro Вы имеете возможность как-то влиять на то, кто и что пишет в лог?
А куда Вы хотите добавить это поле? В свою программу которая обрабатывает логи? Не вижу смысла, т.к. допустим выбран европейский формат времени, а в логе попался американский, то вы получите
0
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|
21.07.2010, 13:25 | 31 |
0
|
Покинул форум
3187 / 1366 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
|
|
21.07.2010, 13:41 | 32 |
Maestro, значит, разница в порядке записи даты бывает только 3 видов: Американская, Европейская, Японская. В самом логе это как-то отобразится?
0
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|
21.07.2010, 14:02 | 33 |
Дата запишется в соответствующем формате. Если честно вопроса не понял. Как это должно отображаться?
0
|
55 / 55 / 5
Регистрация: 09.03.2009
Сообщений: 177
|
|
21.07.2010, 14:08 | 34 |
Т.е. в одном логе может быть только один формат даты\времени? Так??? В том формате который определен на компьютере пользователя, который и делал лог. Правильно я понял?
Тогда конечно делайте комбобоксик с выбором формата в своей программке, которая и анализирует лог. А там уж под это дело и функцию можно написать
0
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|
21.07.2010, 14:12 | 35 |
0
|
55 / 55 / 5
Регистрация: 09.03.2009
Сообщений: 177
|
|
21.07.2010, 14:26 | 36 |
1
|
55 / 55 / 5
Регистрация: 09.03.2009
Сообщений: 177
|
||||||
21.07.2010, 20:16 | 37 | |||||
Так, ну как и обещал. Вот написал небольшую программулину, в качестве примера самое оно:
2
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|
23.07.2010, 17:39 | 38 |
Cepera, Благодарю.
0
|
23.07.2010, 17:39 | |
23.07.2010, 17:39 | |
Помогаю со студенческими работами здесь
38
Работа со временем Работа с временем Работа с временем Работа со временем Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |