我解析文本日期,并将返回DateTime
,如下所示:
DateTime.parse "Feb. 28"
# => Sat, 28 Feb 2015 00:00:00 +0000
但是,解析"Feb. 29"
会导致无效的日期崩溃。如何解决此崩溃以解释此闰年日期?
答案 0 :(得分:1)
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{minted} % don't need to import `listing` or `listings`
% custom labels, according to the docs
\renewcommand\listingscaption{Code}
\renewcommand\listoflistingscaption{List of code snippets}
\title{Code Listing}
\begin{document}
\maketitle
\section{Code examples}
\begin{listing}[H] % creates a float
\begin{minted} % does the syntax highlighting
[
frame=lines,
framesep=2mm,
baselinestretch=1.2,
fontsize=\footnotesize,
linenos
]
{python}
your_code(...)
\end{minted}
\caption{Example of code}
\label{lst:code1}
\end{listing}
This is a reference to Code~\ref{lst:code1} to make it appear in the list of listings.
\clearpage
\listoflistings % NOT `lstlistoflistings`
\end{document}
因此,如果是闰年,您可以将年份与日期Date.leap? 2016 # => true
Date.leap? 2015 # => false
一起传递。这样,你的程序就不会崩溃。
或者,你可以随时使用日期和年份来避免这种情况。即DateTime.parse "Feb. 29 2016"
和DateTime.parse "Feb. 28 2013"
等。如果您以此格式传递日期,则无需明确检查闰年。
答案 1 :(得分:1)
你 CAN 捕获解析无效日期时引发的异常..
begin
d = DateTime.parse("Feb. 29")
rescue ArgumentError
d = "Invalid Date"
end
但它可能并不理想,而且实际上只取决于您对数据的处理方式以及最佳的处理方式。如果您正在寻找完整的日期对象,那么最好做一些事情,例如检查给定日期时间对象的闰年并从那里开始。
答案 2 :(得分:0)
DateTime
对象(或普通意义上的日期)不能仅按月和日定义;它需要一年。您可能已经注意到通过解析"Feb. 28"
,省略年份表示该字符串将被解析为当前年份。字符串"Feb. 29"
未被无条件拒绝,但在此时被拒绝,因为今年(2015年)不是闰年,因此"Feb. 29"
无效。
所以解决方法是,无论何时解析要评估为当前年份的字符串,它都能正常工作;如果当前年份不是闰年,"Feb. 29"
将被正确拒绝。否则,您需要提供明确的年份。
K M Rakibul Islam的回答是在正确的轨道上提及应该提供明确的年份,但是关于何时这样做的答案是错误的。