我需要使用Perl从另一个时间减去一次.两次都是HH:MM:SS格式.
我可以简单地在冒号上分割时间字符串,然后对每组数字执行数学运算,这是相对简单的:
$seconds_passed = $seconds_later - $seconds_earlier;
if ($seconds_passed < 0) { $seconds_passed = 60 - abs($seconds_passed); }
Run Code Online (Sandbox Code Playgroud)
等等分钟和小时,然后通过将每个结果转换为秒并将它们相加来计算通过的总时间.第二行是处理后来的数字实际上更高的情况,比如第一次是23:58:59而第二次是23:59:09,实际经过的秒数是10,但计算结果是给09-59 = -50,所以从60减去那个(50)的正形式给出了正确的结果.
在这种情况下,我正在寻找最简单,最小的解决方案(尽可能避免使用大型和复杂的模块),所以这可能是我的解决方案,但是想知道是否有标准/内置方式做这种事情?
背景:我被要求处理遗留的asp.net应用程序,该应用程序没有文档,原始程序员无法进行咨询.我主要是一个Perl程序员,主要是在*nix系统上,所以虽然我对系统的实际逻辑没有重大问题,但我会被下面的一些"裸骨"东西束缚在一起.
大纲:我正在尝试扩展现有的aspx表单以增加其功能,该表单是购买电话号码系统的一部分.此时,首次调用时的表单会在HTML下拉列表中显示位置列表和电话区号,并希望用户选择一个.当选择一个值(或选择并单击选择按钮,如果禁用JS)并提交表单时,回发模式下的页面将提供适当的重定向到购买页面,并在查询字符串中设置各种值.我想通过在同一表单上添加第二行控件来扩展功能,包括用户输入区号的文本框和"搜索"按钮.这个想法是,当用户这样做时,系统将对该区域代码进行数据库搜索,如果找到匹配,生成适当的重定向到销售该区域的页面.所有代码都是(并将在)C#中.
问题:在Stack Overflow上从asp.net表单中提取表单变量时发现了很多有用的信息,我尝试使用Request.form ["variable_name"]检索我的新变量.但很快就会发现价值观没有通过.
这是表单新位的aspx页面代码:
<tr>
<td align='left'><b>STD code:</b></td>
<td align='left'>
<asp:TextBox id="STD_Code_Search"
AutoPostBack="True"
Columns="7"
Text=""
TextMode="SingleLine"
Wrap="False"
runat="server"/>
</td>
<td><asp:Button ID="Button2" runat="server" Text="Search" /></td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我希望能够将这些变量拉回来
Button2_Clicked = Request.Form["Button2"]
STD_Code_Search = Request.Form["STD_Code_Search"]
Run Code Online (Sandbox Code Playgroud)
但是没有任何事情发生过.基于更多搜索,我发现此代码显示进入表单的所有变量:
foreach(string key in Request.Form.Keys)
{
LOG.WriteLine(key + ": " + Request.Form[key] + "<br/>");
}
Run Code Online (Sandbox Code Playgroud)
LOG对象是一个StreamWriter转到文本文件,似乎工作正常.
但是文件中的数据如下所示:
ctl00$ctl00$ctl00$ContentPlaceHolder1$Main$Range_Data$STD_Code_Search: 01952<br/>
ctl00$ctl00$ctl00$ContentPlaceHolder1$Main$Range_Data$Button2: Search<br/>
Run Code Online (Sandbox Code Playgroud)
很公平,然后我尝试使用以下内容来检索C#中的数据
STD_Search = Request.Form["ctl00$ctl00$ctl00$ContentPlaceHolder1$Main$Range_Data$STD_Code_Search"];
Run Code Online (Sandbox Code Playgroud)
这确实有效,如果我将STD_Search发送到StreamWriter LOG,我可以在文本文件中看到输入的值.
但是,如果我然后尝试读取第二个值(在这种情况下,我试图捕获Button2的值,所以我可以触发特定行为,如果单击该按钮而不是原始按钮),使用以下代码:
STD_Search = Request.Form["ctl00$ctl00$ctl00$ContentPlaceHolder1$Main$Range_Data$STD_Code_Search"];
Button2_Clicked = Request.Form["ctl00$ctl00$ctl00$ContentPlaceHolder1$Main$Range_Data$Button2"];
Run Code Online (Sandbox Code Playgroud)
然后,虽然asp.net进程似乎都正确完成(没有错误或页面崩溃),但文本文件的写入停止并且根本没有写入任何数据.
问题:
我确定我不应该包含所有占位符的东西(在这里阅读我收集到的是底层框架的一部分,而asp实际上应该只提供命名变量,就像Perl或PHP系统一样有一个简单的HTML表单),任何关于为什么可能发生的指针,以及我应该做什么来处理/提取数据?
当我尝试读取第二个变量时,为什么这一切都会消失,尽管我只读了一个工作(对于一些大的工作值)?
是否有关于asp.net和C#的推荐书籍?我有Sitepoint的"使用C#和VB构建你自己的asp.net 4网站",这对于尝试将别人的代码分开并重新构建它有所帮助.
之前的研究:我已经对此进行了广泛的搜索,但是到目前为止我看到的大多数答案都与使用asp.net处理从外部站点提交的数据等的人或者直接使用post的脚本有关.我在asp.net上看过教程的所有网站似乎都说我应该使用Request.Form …
根据W3Schools CSS的说明,如果您在元素上使用ID,那么为该ID定义的CSS样式(使用#id_name)应仅适用于该元素,这就是您应该如何设置仅出现一次的元素的样式.
我有一个包含显示表的站点(实际的表格数据,它是不同分类中的电话号码网格).所以我将表放在div中并将div设置为ID.然后我在stylesheep中为ID定义了样式.
HTML:
<div id='phone_number_grid'>
<table>
...
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
#phone_number_grid table {
border-collapse: collapse;
}
#phone_number_grid th,td {
border: 1px solid #000040;
background-color: #ccccff;
padding: 5px;
}
Run Code Online (Sandbox Code Playgroud)
该样式在其预期的表上完美地工作,但它也影响一个完全不同的表,它没有类或id设置,并且包含在一个完全不相关的div中,它具有自己的(完全不相关的)类设置,在不同的页面上使用相同的样式.
如何阻止#phone_number_grid样式影响不相关的表?
注意我之前在div上使用类ID尝试了同样的事情,结果相同 - 样式"泄露"到其他未提及它们的表上.
Q1:为什么这些样式适用于不引用它们的元素?
Q2:有没有CSS方式说"不要对这个特定元素应用任何样式"?