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

  • Автор темы Автор темы bezvozni
  • Дата начала Дата начала

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:
 
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.
 
Последнее редактирование:
Если будет нужно брать "нынешнее время" с переменной - заменить в формуле unixTime на timenow.

И закомментировать вторую строку нужно - вылазит ошибка.

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

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

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

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

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

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

Эксель с этой задачей уже несколько лет справляется на ура. Но его, при помощи дополнительного приложения, приходится запускать каждый раз, как проекту нужно узнать дату след. поста. Потому что формулы не срабатывают без запуска документа.
 
Последнее редактирование:
Это не код не работает, а .....
Код:
Развернуть Свернуть Копировать
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
Последнее редактирование:

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