You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于PjDateFormat将MS Project自定义字段日期字符串转为DateTime?

基于PjDateFormat将MS Project自定义字段日期字符串转换为DateTime类型

当然可以实现,核心思路是将PjDateFormat枚举值映射为对应的日期格式字符串,再用精确解析方法把字符串转成DateTime类型。以下是具体实现步骤和示例:

关键步骤

  1. 建立PjDateFormat与格式字符串的映射
    MS Project的PjDateFormat枚举每个值对应固定的日期显示格式,你需要把已知的目标枚举值匹配到对应的格式字符串。比如你提供的示例格式"Tue 11/21/23 7:43 AM",对应的格式字符串是"ddd MM/dd/yy h:mm tt",对应的PjDateFormat通常是pjDateDayMonthYearTime(具体可根据你的MS Project设置确认)。

  2. 使用精确解析方法转换
    用DateTime.ParseExact或DateTime.TryParseExact(推荐后者,避免转换失败抛出异常),传入字段字符串、映射的格式字符串和对应的文化信息(示例是英文格式,用en-US)。

C# 示例代码

using Microsoft.Office.Interop.MSProject;
using System.Globalization;
using System.Collections.Generic;

// 建立PjDateFormat到格式字符串的映射表
var dateFormatMapping = new Dictionary<PjDateFormat, string>
{
    { PjDateFormat.pjDateDayMonthYearTime, "ddd MM/dd/yy h:mm tt" },
    // 根据需要添加其他PjDateFormat对应的格式字符串
};

// 获取自定义字段的字符串值
Resource targetResource = ActiveProject.Resources["目标资源"];
string dateString = targetResource.GetField(PjField.pjResourceCustomDate1);

// 已知的目标PjDateFormat
PjDateFormat usedFormat = PjDateFormat.pjDateDayMonthYearTime;

// 执行转换
DateTime parsedDate;
if (DateTime.TryParseExact(
    dateString,
    dateFormatMapping[usedFormat],
    CultureInfo.GetCultureInfo("en-US"),
    DateTimeStyles.None,
    out parsedDate))
{
    // 转换成功,parsedDate即为所需的DateTime对象
}
else
{
    // 处理格式不匹配、转换失败的场景
}

VBA 示例代码

如果是在VBA环境中操作,思路类似:

Sub ConvertCustomDateField()
    Dim targetRes As Resource
    Dim dateStr As String
    Dim parsedDate As Date
    
    Set targetRes = ActiveProject.Resources("目标资源")
    dateStr = targetRes.GetField(pjResourceCustomDate1)
    
    ' 对应示例格式的格式字符串
    Dim formatStr As String
    formatStr = "ddd MM/dd/yy h:mm AM/PM"
    
    ' 执行转换
    On Error Resume Next
    parsedDate = CDate(Format(dateStr, formatStr))
    On Error GoTo 0
    
    If IsDate(parsedDate) Then
        ' 转换成功
    Else
        ' 处理转换失败
    End If
End Sub

注意事项

  • 确保格式字符串与PjDateFormat对应的显示规则完全一致,比如星期缩写长度(ddd是三位缩写,dddd是全称)、年份位数(yy是两位,yyyy是四位)、时间制(12小时制带tt/AM/PM,24小时制用HH)。
  • 文化信息要匹配字符串的语言(示例是英文,用en-US;如果是中文格式,需用zh-CN等)。

内容的提问来源于stack exchange,提问作者P_rnd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 17:07:23