Добавление TimeSpan к данному DateTime

Относится к @ t.m.adam

Вы можете использовать следующее регулярное выражение для извлечения из исходного HTML. Используйте флаг DOTALL , чтобы разрешить перевод строк. User-Agent требуется в заголовках.

import requests
import re
import json

url = 'https://www.icra.in/Rationale/Index?CompanyName=20%20Microns%20Limited'
headers = {    
    'User-Agent' : 'Mozilla/5.0'
}
r = requests.get(url, headers = headers)
data = re.search('var Model =(.*?);\s+Ratinoal', r.text, flags=re.DOTALL).group(1)
result = json.loads(data)
for item in result['LstrationaleDetails']:
    print(item)

25
задан Appulus 16 August 2016 в 07:39
поделиться

7 ответов

Значения DateTime являются неизменными . Метод Add возвращает новое значение DateTime с добавленным TimeSpan .

Это работает:

Console.WriteLine("A day after the day: " + date.Add(t).ToString());
60
ответ дан dtb 28 November 2019 в 17:39
поделиться

ДТБ прав, что DateTime неизменен. Подумайте об этом так: a DateTime - это тип значения, который относит его к той же категории, что и int или double. Экземпляры этих структур не могут быть изменены; их можно только оценить и скопировать.

Рассмотрим этот код:

int i = 4;

i + 2;     // does not compile, but what if it did?
           // would i become 6? clearly not --
           // i + 2 expresses a NEW value, which can
           // be copied somewhere

i = i + 2; // there we go -- that's better

Это аналогично:

DateTime d = DateTime.Now;
TimeSpan t = TimeSpan.FromDays(1.0);

d.Add(t);     // compiles (because AddDays is a function),
              // but is really the same as i + 2 above

d = d.Add(t); // that's better

Кстати, одна вещь, которая может помочь сделать это более понятным, это осознание того, что приведенная выше строка, d = d.Add(t), так же, как d = d + t. И вы не написали бы d + t в отдельной строке, точно так же, как вы не написали бы i + 2 в отдельной строке.

11
ответ дан Dan Tao 28 November 2019 в 17:39
поделиться

Что плохого в том, чтобы просто делать date = date.AddDays(1)?

5
ответ дан Klaus Byskov Pedersen 28 November 2019 в 17:39
поделиться

DateTime является неизменным, но функции Add и Subtract возвращают новые DateTimes, которые вы можете использовать.

DateTime tomorrow = DateTime.Now.AddDays(1);
7
ответ дан 28 November 2019 в 17:39
поделиться

Вам нужно изменить строку:

date = date.Add(t);
16
ответ дан 28 November 2019 в 17:39
поделиться

Результат date.Add(t) - это то, что вам нужно:

 DateTime date = new DateTime(2010, 4, 29, 10, 25, 00);
 TimeSpan t = new TimeSpan(1, 0, 0, 0);

 // The change is here, setting date to be the *new* date produced by calling Add
 date = date.Add(t);

 Console.WriteLine("A day after the day: " + date.ToString());
5
ответ дан 28 November 2019 в 17:39
поделиться
date.Add(t);

возвращает измененный DateTime и не изменяет исходный экземпляр, для которого вы вызываете метод Add.

2
ответ дан 28 November 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: