3

大家好,我有一个 sql 函数,其中一部分用于将 varchar 转换为 datetime:

IF @dt IS NULL
    SET @dt = GETDATE();

SET @PDate = CONVERT(DATETIME, @PValue + '-' + CONVERT(NVARCHAR(4),YEAR(@dt))); 
IF @PDate > @dt
    SET @Year = YEAR(@dt) - 1;
ELSE
    SET @Year = YEAR(@dt);

RETURN (SELECT CONVERT(DATETIME, @PValue + '-' + CONVERT(NVARCHAR(4),@Year)));

有人能帮我吗?

我的价值@PValue01-APRIL

我只是在我的 C# 代码中声明 Datetime 如下:

DateTime? dt=null;

if(!(dt.HasValue))
    dt=DateTime.Now;

但在此之后,我很困惑做剩下的事情。

4

4 回答 4

1

您可以使用年份字段来正确转换,我看不出01-APRIL这是一个有效的日期。01-APRIL什么时候?获得有效的结构化日期时间后,您的C#代码将显示为:

string pValue = @"01/04";
DateTime dt = new DateTime();
DateTime now = DateTime.Now;
pValue += string.Format(@"/{0}", now.Year);
int year = 0;
if (DateTime.TryParse(pValue, ref dt))
{
  if (dt > now)
    year = dt.Year -1
  else
    year = dt.Year;
}
于 2013-03-14T10:50:59.880 回答
0

像下面的东西

DateTime? dt = null;
        int pYear = 2012; // assuming pYear is getting populated from somewhere
        int finalYear = 1900; // initilizing some value to it;
        if (!(dt.HasValue))
            dt = DateTime.Now;
        var year = dt.Value.Year;
        var pValue = "1-Apr";
        if (pYear > year)
            finalYear = pYear - 1;
        else
        {
            finalYear = year;
        }

        return pValue + finalYear.ToString();
于 2013-03-14T10:57:23.053 回答
0

如果要将字符串转换为日期,则应使用该DateTime.Parse方法。您可能应该将参数声明为 a string,而不是DateTime?

于 2013-03-14T10:50:02.120 回答
0

只需调用DateTime.Parseor DateTime.ParseExact,永远不要自己解析日期,因为您的实现中会有错误。这是人生的必然之一,就像死亡和税收一样。

如果您使用Parse并且ParseExact不确定指定 aCultureInfo因为03/06/99如果当前语言环境是英语(美国)而不是英语(英国),则解析方式会有所不同。

于 2013-03-14T10:51:14.247 回答