我需要将用户传递的文本转换为日期时间。我知道用户的文化,所以我传入了:
if (System.DateTime.TryParse(enteredValue, userCultureInfo, DateTimeStyles.None, out newDateTimeValue)
{
//do something
}
这一切都运行良好,但如果用户一年没有通过,“Do Something”部分需要在newDateTimeValue中添加1年。
e.g。如果用户输入(使用澳大利亚文化代码):
如果用户在一年内过世,我该如何计算?
答案 0 :(得分:2)
尝试附加默认年份,如果失败,则解析原始输入:
transform(data,A=unlist(by(Date,ID,FUN=function(x)c(-diff(x),0))))
ID Date A
1: A 2010-12-30 17
2: A 2010-12-13 112
3: A 2010-08-23 0
4: B 2011-06-24 11
5: B 2011-06-13 478
6: B 2010-02-20 0
它适用于我尝试过的所有测试用例,但可能有一些不同寻常的格式可以与int defaultYear = (DateTime.Now.Year + 1);
bool ok = DateTime.TryParse(input + " " + defaultYear.ToString(), out result)
|| DateTime.TryParse(input, out result);
一起使用,但会以空格分隔的年份打破。
(当然,您可以传递额外的TryParse
和cultureInfo
个参数,为了简洁,我将其遗漏了。
答案 1 :(得分:-2)
所以我做了一个快速测试,似乎如果没有提供年份,将使用当前年份。因此,您需要确定输入的日期是否具有当前年份,如果没有,则先推进它。以下是一个例子。
DateTime parsedResult;
string entry = "26 Feb";
if(DateTime.TryParse(entry, new CultureInfo("en-AU"), DateTimeStyles.None, out parsedResult))
{
if (!entry.Contains(DateTime.Today.Year.ToString() &&
!entry.Contains(DateTime.Today.ToString("yy")))
{
// This means the entry had no year
DateTime advanced = parsedResult.AddYears(1);
}
}