Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#将PDF元数据CreationTime转换为DateTime_C#_Pdf_Itext - Fatal编程技术网

c#将PDF元数据CreationTime转换为DateTime

c#将PDF元数据CreationTime转换为DateTime,c#,pdf,itext,C#,Pdf,Itext,我需要处理从PDF元数据检索的CreationTime,并将其与DataTime格式进行比较 string path = e.Row.Cells[1].Text; var pdfReader = new PdfReader(path); var CreatedDate = pdfReader.Info["CreationDate"]; e.Row.Cells[13].Text = Convert.ToString(CreatedDate); 这将返回一个日期时间字符串,如: D:201507

我需要处理从PDF元数据检索的CreationTime,并将其与DataTime格式进行比较

string path = e.Row.Cells[1].Text;
var pdfReader = new PdfReader(path);
var CreatedDate = pdfReader.Info["CreationDate"];
e.Row.Cells[13].Text = Convert.ToString(CreatedDate);
这将返回一个日期时间字符串,如:

  • D:20150710080410
  • D:20150209075651+01'00'
要比较:

            DateTime Created = Convert.ToDateTime(CreatedDate);
            DateTime Compare = Convert.ToDateTime(e.Row.Cells[14].Text);
            if (Compare > Created)
            {
                e.Row.Cells[15].Text = "actualizar";
            }

Martin

如果您要转换的日期时间字符串每次都以“D:”开头,那么您可以考虑为D:”添加一个删除函数。当你尝试转换时,这可能会给你带来异常。试试这个:

// Gather the Info
string path = e.Row.Cells[1].Text;
var pdfReader = new PdfReader(path);
var CreatedDate = pdfReader.Info["CreationDate"];
e.Row.Cells[13].Text = Convert.ToString(CreatedDate);
string sCreatedDate = Convert.ToString(CreatedDate).Remove(0, 2)

// Convert and Compare
DateTime Created = Convert.ToDateTime(sCreatedDate);
DateTime Compare = Convert.ToDateTime(e.Row.Cells[14].Text);
if (Compare > Created)
{
    e.Row.Cells[15].Text = "actualizar";
}
您不必创建sCreatedDate,但以这种方式查看它会更简洁一些。您还可以转换CreatedDate.ToString()。执行日期时间转换时删除(0,2):

DateTime Created = Convert.ToDateTime(CreatedDate.ToString().Remove(0,2));

希望这能有所帮助。

我真的需要一个解决方案,BBL管理员关于编写自己函数的评论是我的出路

通过此[此itex支持链接][1]我可以获得pdfDate格式的INTERPRATION,格式为D:YYYYMMDDHHmmSSOHH'mm'

接下来我需要知道的是c#中的受支持日期格式,我可以使用[c-sharpcorner这篇文章][2]中的
DateTime.Parse()
进行解析,最适合我的是“yyyy”-“MM”-“dd'T'HH:“MM:“ss”

知道了我得到的输入和可以解析的格式后,我创建了下面的函数来构造日期,基本上是从pdfDate中获取部分并为“parsable”日期字符串构建部分

private DateTime CreateDateTime(string date) //use the pdfDate as parameter to the date argument
  {
            string dateStr = date.Remove(0, 2).Remove(14, 6); //Remove D: & OHH'mm
            string tmpDateStr = dateStr.Substring(0, 4) //Get year i.e yyyy
                + "-" + dateStr.Substring(4, 2) // Get month i.e mm & prepend - (hyphen)
                + "-" + dateStr.Substring(6, 2) // Get day i.e dd & prepend -
                + "T" + dateStr.Substring(8, 2) // Get hour and prepend T
                + ":" + dateStr.Substring(10, 2) // Get minutes and prepend :
                + ":" + dateStr.Substring(12, 2); //Get seconds and prepend :

            return DateTime.Parse(tmpDateStr);  
  }
好吧,我希望你在提问时能找到一种方法,任何其他面临同样挑战的人都可以试试我的方法,看看是否有帮助。然而,问题得到了回答

NB:可能还有其他/更好的方法。 [1]:
[2] :

那么问题是什么?您在哪里执行此操作?将元数据的
与日期时间进行比较…?这些日期时间字符串看起来与ISO-32000-1中所述完全相同,因此。。。是的,看起来不错。为什么你认为他们错了?好吧,我不知道这是标准的-抱歉我的无知-所以问题是如何将其转换为兼容格式,以便将数据与我从gridview检索的日期时间列进行比较(显示为21/07/2015 7:24:54)。请参阅上面我编辑的文章。这会引发将Convert.ToDateTime(CreatedDate)转换为DateTime的错误。该字符串未被识别为有效的日期时间。有一个从索引0开始的未知单词。不幸的是,它没有!转换再次抛出错误“字符串未被识别为有效的日期时间”。在进行转换时,您能否发布sCreateDate等于什么?嗯。。。仅通过删除前导的2个字符,字符串就不会被转换为更易于理解的Convert.ToDateTime命令:Convert.ToDateTime(“20150710080410”)->字符串未被识别为有效的DateTimeCorry,我已经离开一段时间了。我对有效的日期时间格式做了一些挖掘,但它确实不是有效的格式。例如:20150710080410无效,但这是有效的格式:2015-07-10T08:04:10。类似地:20150209075651+01'00'无效,但2015-02-09T07:56:51+01:00将转换。请参阅此链接:根据您的需要,您可能需要一个方法来返回正确的值,以便进行比较。是您需要转换为标准格式的值吗?如果是这样的话,这应该很容易实现。删除(14,6)似乎不需要,如果长度不超过14个字符,它可能会抛出错误。顺便说一句,你的ans帮我一把