【发布时间】:2016-08-09 18:26:28
【问题描述】:
我正在为一个 ssis 包编写一个 C# 脚本,并在英国服务器上运行它,但我想以 yyyMMdd 的形式获得美国格式的日期时间。
但是当我执行 datevariablename.ToString("yyyyMMdd") 时,它会返回一个格式为 yyyyddMM 的字符串。我什至尝试使用 DateTime 的 Month、Day 和 Year 方法,但它仍然给了我日期作为月份和月份作为日期。
有谁知道我如何获得以 yyyyMMdd 格式返回的字符串?以下是我的代码的 sn-p:
private static readonly string[] dateFormat = { "M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
"MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
"M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
"M/d/yyyy h:mm", "M/d/yyyy h:mm",
"MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm",
"d/M/yyyy h:mm:ss tt", "d/M/yyyy h:mm tt",
"dd/MM/yyyy hh:mm:ss", "d/M/yyyy h:mm:ss",
"d/M/yyyy hh:mm tt", "d/M/yyyy hh tt",
"d/M/yyyy h:mm", "d/M/yyyy h:mm",
"dd/MM/yyyy hh:mm", "dd/M/yyyy hh:mm"
};
public void Main()
{
// TODO: Add your code here
Dts.TaskResult = (int)ScriptResults.Success;
var date = DateTime.Now;
var date2 = DateTime.Now;
var inputDate = Dts.Variables[dateUnformated].Value;
if (DateTime.TryParseExact(inputDate.ToString(), dateFormat, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out date))
{
var yyyymmdd = date.Year.ToString() + date.Month.ToString("0#") + date.Day.ToString("0#");
Dts.Variables[Date1].Value = yyyymmdd;
Dts.Variables[Date2].Value = date.ToString("yyyyMMdd");
}
【问题讨论】:
-
使用
DateTime.ParseExact -
像这样向它提供 M/d 和 d/M 格式的混合列表意味着它将匹配它找到的第一个,这很容易在每个月的 12 天中出错
-
@Plutonix 好点,只要列表按所需优先级排序,我仍然认为它是有效的。因为最终没有人能告诉你 2016 年 1 月 1 日与 2016 年 1 月 1 日(MM/dd/yyyy vs dd/MM/yyyy)当月份和日期相同时:)
-
如果存在现有日期 -
inputDate- 则无需将其转换为字符串并将其解析回日期以“更改格式”。使用这种热门的格式这样做至少会偶尔更改日期。给定一个有效的日期,ValidDate.ToString("yyyyMMdd")将产生相同的结果,无论文化如何。