Вычисление даты и времени (формула) C#?

bezvozni

Client
Регистрация
31.03.2013
Сообщения
306
Благодарностей
29
Баллы
28
Есть четыре переменные (в скобках указано содержание переменных):

deadline (day.month.year 00:00:00)
lastpost (day.month.year hour:minute:second)
TimeNow (day.month.year hour:minute:second)
nextpost (day.month.year hour:minute:second)
kolvo (integer)

Необходимо реализовать следующую формулу:
lastpost+(deadline-TimeNow)/kolvo=nextpost

Внимание вопрос. Какова вероятность, что мне предоставят готовый код? :bw:
 

iDnx

Client
Регистрация
06.06.2013
Сообщения
129
Благодарностей
104
Баллы
43
99%
Код:
int unixTime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
int timenow = (int)(DateTime.Parse(project.Variables["timenow"].Value) - new DateTime(1970, 1, 1)).TotalSeconds;
int deadline = (int)(DateTime.Parse(project.Variables["deadline"].Value) - new DateTime(1970, 1, 1)).TotalSeconds;
int lastpost = (int)(DateTime.Parse(project.Variables["lastpost"].Value) - new DateTime(1970, 1, 1)).TotalSeconds;
int count = Convert.ToInt32(project.Variables["kolvo"].Value );

var postTime = lastpost + (deadline - unixTime) / count;
// return postTime;

return new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime().AddSeconds(postTime);
Если будет нужно брать "нынешнее время" с переменной - заменить в формуле unixTime на timenow.
 
Последнее редактирование:

bezvozni

Client
Регистрация
31.03.2013
Сообщения
306
Благодарностей
29
Баллы
28
Если будет нужно брать "нынешнее время" с переменной - заменить в формуле unixTime на timenow.
И закомментировать вторую строку нужно - вылазит ошибка.

Не могу понять почему код и эксель считают по разному
upload_2015-5-27_16-16-7.png

Уже кучу разных вариантов перепробовал - меня только сбивает с толку.
То разница до 20 дней до ходит. То не больше 2х часов. То разница напрямую зависит от "кол-во" и только от неё, то "кол-во" и не влияет вроде. Причем сейчас считаю - одна разница, а через некоторое время те же данные считаю - принципиально иная. В общем нет ощущения, что код работает правильно. Может я что-то не так делаю, хотя перепроверил всё что мог (банальных ошибок - точно не допущено).
 
Последнее редактирование:

bezvozni

Client
Регистрация
31.03.2013
Сообщения
306
Благодарностей
29
Баллы
28
Ребят, кто разбирается? Проверьте, пожалуйста, правильность кода.

Перед тем как его использовать мне нужно быть уверенным, в его правильности. Единственное, что мне удалось придумать - проверить код экселем. Но проверка выдаёт противоречивые данные - никак не могу понять что не так.

Уточню задачу. Для этого приведу пример:

deadline = 25.07.2015 00:00:00
lastpost = 27.05.2015 09:53:46
kolvo = 15
TimeNow (текущее время) = 28.05.2015 16:55:47

1. Необходимо посчитать сколько времени осталось до дедлайна: (deadline-TimeNow)
Осталось 57 дней, 6 часов, 45 минут
2. Разделить его на нужное количество постов: (deadline-TimeNow)/15
Таким образом я получаю интервал с которым нужно размещать посты.
Интервал получается 3 дня, 19 часов, 39 минут
3. Выяснить когда необходимо оставить следующий пост, для этого прибавить интервал к дате последнего поста: lastpost+(deadline-TimeNow)/15
Получается, что следующий пост разместить нужно 31.05.2015 в 5:32

До секунды считать совсем не обязательно. Но до минуты - желательно.

Эксель с этой задачей уже несколько лет справляется на ура. Но его, при помощи дополнительного приложения, приходится запускать каждый раз, как проекту нужно узнать дату след. поста. Потому что формулы не срабатывают без запуска документа.
 
Последнее редактирование:

iDnx

Client
Регистрация
06.06.2013
Сообщения
129
Благодарностей
104
Баллы
43
Это не код не работает, а .....
Код:
int timenow = (int)(DateTime.Parse(project.Variables["TimeNow"].Value) - new DateTime(1970, 1, 1)).TotalSeconds;
int deadline = (int)(DateTime.Parse(project.Variables["deadline"].Value) - new DateTime(1970, 1, 1)).TotalSeconds;
int lastpost = (int)(DateTime.Parse(project.Variables["lastpost"].Value) - new DateTime(1970, 1, 1)).TotalSeconds;
int count = Convert.ToInt32(project.Variables["kolvo"].Value );
var postTime = lastpost + (deadline - timenow) / count;
return new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(postTime);
Данный код с исходными данными высчитал 31.05.2015 5:34:02

p.s. код обновил.
 
Последнее редактирование:
  • Спасибо
Реакции: bezvozni

bezvozni

Client
Регистрация
31.03.2013
Сообщения
306
Благодарностей
29
Баллы
28
Последнее редактирование:

iDnx

Client
Регистрация
06.06.2013
Сообщения
129
Благодарностей
104
Баллы
43
  • Спасибо
Реакции: bezvozni

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)