Ada_Ru форум

Обсуждение языка Ада

Как из Duration или Integer сделать Ada.Calendar.Time ?

Оставить новое сообщение

Сообщения

Александр Никольников
Как из Duration или Integer сделать Ada.Calendar.Time ?
2006-05-12 03:37:41

Привет !

 

Есть число секунд прошедших с 01.01.1970 00:00:00. Необходимо преобразо- вать их в Ada.Calendar.Time . Как это сделать ? В пакете Ada.Calendar подходящей функции нет. Пока сделал с помощью Unchecked_Conversion:

function To_Time is new Unchecked_Conversion (Duration, Time);

 

Наверное есть более красивый метод ? Подскажите, если кто знает ;)

--

Саша

Александр Никольников wrote:

 

>Привет !

 

>Есть число секунд прошедших с 01.01.1970 00:00:00. Необходимо преобразо- >вать их в Ada.Calendar.Time . Как это сделать ? В пакете Ada.Calendar >подходящей функции нет.

 

Есть.

*function* "+" (Left : Time; Right : Duration) *return* Time;

Вам надо к дате 01.01.1970 00:00:00 прибавить эти секунды.

 

Пока сделал с помощью Unchecked_Conversion:

 

>function To_Time is new Unchecked_Conversion (Duration, Time);

 

 

Так вообще нельзя. То что получится совпадет с правдой только в GNAT.

В GNAT это проканало потому что там type Time is new Duration; и похоже там принято что Time именно длительность от 1970 года.

 

В других Ада компиляторах этот номер не пройдет, В Aonix ObjectAda например

type Time is record

day_in_epoch : Day_Count;

-- Day number, where number 1 is January 1, 1901

-- Outside of this package, is always >= 1.0

 

seconds_since_day : Duration;

-- Seconds since beginning of the Day.

-- Outside of this package, is always >= 0.0

-- and < Day_Duration'Last.

end record;

Александр Никольников wrote:

 

Это я первым делом попробовал. Проблема в том, что Time_Of(1970, 1, 1, 0.0)

совсем не 0 секунд, а, в моём случае, -18000 :(

 

Какой операционной системой Вы пользуетесь и в каком часовом поясе находитесь?

 

 

-- Vadim Godunko

 

Technoserv A/S

Rostov-on-Don, Russia

On Fri, May 12, 2006 at 10:43:40AM +0700, Dmitriy Anisimkov wrote:

Александр Никольников wrote:

 

>Привет !

 

>Есть число секунд прошедших с 01.01.1970 00:00:00. Необходимо преобразо- >вать их в Ada.Calendar.Time . Как это сделать ? В пакете Ada.Calendar >подходящей функции нет.

 

Есть.

*function* "+" (Left : Time; Right : Duration) *return* Time;

Вам надо к дате 01.01.1970 00:00:00 прибавить эти секунды.

 

 

Это я первым делом попробовал. Проблема в том, что Time_Of(1970, 1, 1, 0.0) совсем не 0 секунд, а, в моём случае, -18000 :(

 

--

Саша

Александр Никольников wrote:

 

>On Fri, May 12, 2006 at 10:43:40AM +0700, Dmitriy Anisimkov wrote:

 

>Александр Никольников wrote:

 

 

 

>Привет !

 

>Есть число секунд прошедших с 01.01.1970 00:00:00. Необходимо преобразо- >вать их в Ada.Calendar.Time . Как это сделать ? В пакете Ada.Calendar >подходящей функции нет.

 

 

 

>Есть.

*function* "+" (Left : Time; Right : Duration) *return* Time;

>Вам надо к дате 01.01.1970 00:00:00 прибавить эти секунды.

 

 

 

 

>Это я первым делом попробовал. Проблема в том, что Time_Of(1970, 1, 1, 0.0) >совсем не 0 секунд, а, в моём случае, -18000 :(

 

 

Вам надо прибавить некоторе время к 1970 году, и получить это время в Ада формате, вот и прибавляйте.

 

утверждение "что Time_Of(1970, 1, 1, 0.0) совсем не 0 секунд, а, в моём случае, -18000, не верное", потому что время не является длительностью,

а мухи не являются катлетами.

 

Может Вы чего то недоговариваете. Объясните задачу из которой появилась эта подзадача, может быть Вам помогут тогда.

On Fri, May 12, 2006 at 11:49:52AM +0700, Dmitriy Anisimkov wrote:

...

 

 

Может Вы чего то недоговариваете. Объясните задачу из которой появилась эта подзадача, может быть Вам помогут тогда.

 

 

Да, Вы правы, я упустил важный момент: число секунд не с 01.01.1970 00:00:00, а с 01.01.1970 00:00:00 GMT. Мне нужно преобразовать это число в локальное время или наоборот.

 

--

Саша

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти