![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Ivan_S |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 30.8.2004 Репутация: 1 Всего: 1 |
У кого нибудь есть функция перевода даты и времени в секунды и обратно.
можно на любом языке. Необходимо перевести время в число секунд прошедшее до этого момента с 0:00:00 01.01.2000 и обратно. Это число кокрас влезает в long |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
На Java пойдет? (извиняюсь что не C++, но вроде нужно на любом языке)
Это сообщение отредактировал(а) Domestic Cat - 30.8.2004, 17:40 -------------------- |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Переводи в FILETIME, например SystemTimeToFileTime, там время хранится с точностью до 100 нс, не помню сколько это в секундах, вроде бы одна десятитысячная. Дели на 10000 и всё. |
|||
|
||||
| Ivan_S |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 30.8.2004 Репутация: 1 Всего: 1 |
Проблема в том, что я пишу программу под микросхему "ATMega8", в котором только голый C, даже не C++. И нет ни каких дополнительных функций для работы со временем и датой.
Программа должна считывать информацию с микросхемы DS1307, которая возвращает текущую дату и время в виде ......|.BIT7.|..........|..........|..........|..........|..........|..........|.BIT0...| ......------------------------------------------------------------------------- 00H|...CH..|......10.Seconds........|..............Seconds.................|..00-59 ......------------------------------------------------------------------------- ......|....0....|......10.Minutes.........|..............Minutes..................|..00-59 ......------------------------------------------------------------------------- ......|....0....|..12 /.|10 HR.|10.HR.|.................Hours..................|..1-12 ......|..........|....24.|..A/P...|..........|.............................................|..00-23 ......------------------------------------------------------------------------- ......|....0....|....0...|....0....|....0....|....0....|.............Day...............|..1-7 ......------------------------------------------------------------------------- ......|....0....|....0...|.....10 Date....|..................Date...................|..01-28/29;..01-30;..01-31 ......------------------------------------------------------------------------- ......|....0....|....0...|....0....|10.Mo|...................Month.................|..01-12 ......------------------------------------------------------------------------- ......|...............10 Year................|..................Year...................|..00-99 ......------------------------------------------------------------------------- перевести это в long и вместе с другими замеренными параметрами записать во Flash память. Функцию перевода в long я написал: //---------------------------------------------------------------------------------------------------- #define CharData(_data, _pos) _data[_pos] #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //---------------------------------------------------------------------------------------------------- uint MONTH[12]={0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; ulong getSec(const uchar *DateTime){ uint gYear=CharData(DateTime, 6); gYear=(gYear&0x0F)+((gYear&0xF0)>>1)+((gYear&0xF0)>>3); uint gMonth=CharData(DateTime, 5)&0x1F; gMonth=(gMonth&0x0F)+((gMonth&0x10)>>1)+((gMonth&0x10)>>3); uint gDate=CharData(DateTime, 4)&0x3F; gDate=(gDate&0x0F)+((gDate&0x30)>>1)+((gDate&0x30)>>3); uint gDay=gYear*365+((gYear+3)>>2); gDay+=MONTH[gMonth-1]+((gMonth>2) ?!(gYear%4) :0); gDay+=gDate-1; uint gHours=CharData(DateTime, 2)&0x3F; gHours=(gHours&0x0F)+((gHours&0x30)>>1)+((gHours&0x30)>>3); uint gMinutes=CharData(DateTime, 1)&0x7F; gMinutes=(gMinutes&0x0F)+((gMinutes&0x70)>>1)+((gMinutes&0x70)>>3); ulong gSeconds=CharData(DateTime, 0)&0x7F; gSeconds=(gSeconds&0x0F)+((gSeconds&0x70)>>1)+((gSeconds&0x70)>>3); gSeconds=(ulong)gDay*86400+gHours*3600+gMinutes*60+gSeconds; return gSeconds; } //---------------------------------------------------------------------------------------------------- , а обратно уже замаелся Это сообщение отредактировал(а) Ivan_S - 31.8.2004, 09:15 |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Ivan_S задача вроде халявная - опиши словами данные с микросхемы, а то так врубиться не могу.
|
|||
|
||||
| Ivan_S |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 30.8.2004 Репутация: 1 Всего: 1 |
микросхема возвращает 8 байт:
00h - секунды 01h - минуты 02h - часы 03h - день недели 04h - дата 05h - месяц 06h - год 07h - системный байт все значения имеют формат BCD (двоично-десятичный код). младшие 4 бита - младшая цифра, старшие 4 бита - старшая цифра. Микросхема автоматически учитывает высокосный год. необходимо перевести все значения часов в нормальный вид и подсчитать абсолютное число секунд от начала счетчика и обратно. Это сообщение отредактировал(а) Ivan_S - 1.9.2004, 11:07 |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Не так просто оказалось - вот что накидал - как работает не проверял, но общий смысл понятен
А вообще - посмотри исходники стандартных сишных функций, типа gmtime и localtime - они в вижал студии есть. |
|||
|
||||
| Ivan_S |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 30.8.2004 Репутация: 1 Всего: 1 |
сделал. кому надо - берите
Все функции протестированы. циклически проверены все варианты - результаты сходятся. Это сообщение отредактировал(а) Ivan_S - 2.9.2004, 12:05 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |