msbuild脚本中的日期格式?

时间:2010-01-22 11:40:45

标签: date msbuild scripting msbuild-task msbuildcommunitytasks

在我的msbuild脚本中,我在zip文件名中创建了一个年/月/日的zip文件,但是月和日总是写成没有前导零。

有没有办法在我的zip文件名中添加前导零?

<Time>
  <Output TaskParameter="Year" PropertyName="Year" />
  <Output TaskParameter="Month" PropertyName="Month" />
  <Output TaskParameter="Day" PropertyName="Day" />
</Time>

<PropertyGroup>
  <ZipOutDir>C:\output</ZipOutDir>
  <ZipFileName>Application_$(Year)$(Month)$(Day).zip</ZipFileName>
</PropertyGroup>

结果是:'Application_2010122.zip'(1月没有前导零,你可以看到)

4 个答案:

答案 0 :(得分:26)

In msbuild 4 you can now

$([Namespace.Type]::Method(..parameters…))
$([Namespace.Type]::Property)
$([Namespace.Type]::set_Property(value))

所以我正在使用

$([System.DateTime]::Now.ToString(`yyyy.MMdd`))

格式周围的标记是反引号而不是'

答案 1 :(得分:4)

您可以使用MSBuild扩展包la:

http://www.msbuildextensionpack.com/help/3.5.3.0/html/9c5401ed-6f55-089e-3918-2476c186ca66.htm

或者将格式参数用于社区任务[您似乎正在使用]

中的时间任务

MSBuild MSBuildCommunityTasks Task Time

答案 2 :(得分:0)

这是因为MSBuild只使用字符串。您必须修改现有任务,以便所有属性都返回string而不是int s(或返回它们的任何整数值),或者创建一个单独的任务,它将格式化年,月和一天根据您的需要。

答案 3 :(得分:-1)

这是一种廉价而肮脏的方式来添加前导零

$([System.UInt16]::Parse($(Month)).ToString('00'))