gpt4 book ai didi

date - 在 .NET 中 RTF 日期戳转换为 DateTime 格式,反之亦然

转载 作者:行者123 更新时间:2023-12-02 12:15:29 26 4
gpt4 key购买 nike

有谁知道 RTF 中的日期戳以哪种日期时间格式表示?

例如:如果您在 Word 文档中包含日期为“1970-01-01T00:00:00”的注释,并且以富文本格式导出该文档,则上面的日期时间将被解析为:“-2074015744”。

如果 RTF 中的日期以 UNIX 时间表示,它应该是“0000000000”,所以我认为这不是正确的格式。

更具体地说:假设我们有 RTF 文档的以下部分:

{\*\atrfstart 37360238}{\*\atrfend 37360238}{\*\atnid JD}{\*\atnauthor John Doe}\chatn{\*\annotation{\*\atnref 37360238}{\*\atndate 1730446516}\pard\s0\ltrpar\sl276\slmult1{\ltrch\i0\b0\strike0\ulnone sample comment}{\ltrch\i0\b0\strike0\ulnone\par}}

注释的日期由 {*\atndate 1730446516} 组表示。我们要解析日期时间格式中控制字\atndate 前面的整数。

提前致谢!

最佳答案

我为此苦苦挣扎,发现 LibreOffice 人员解决了这个问题。该问题涉及大量位移。 1970 年的负数是整数无符号/有符号的误解。

参见 https://docs.libreoffice.org/sw/html/writerwordglue_8cxx_source.html 的第 726 行

  726 long DateTime2DTTM( const DateTime& rDT )
727 {
728 /*
729 mint short :6 0000003F minutes (0-59)
730 hr short :5 000007C0 hours (0-23)
731 dom short :5 0000F800 days of month (1-31)
732 mon short :4 000F0000 months (1-12)
733 yr short :9 1FF00000 years (1900-2411)-1900
734 wdy short :3 E0000000 weekday(Sunday=0
735 Monday=1
736 ( wdy can be ignored ) Tuesday=2
737 Wednesday=3
738 Thursday=4
739 Friday=5
740 Saturday=6)
741 */
742
743 if ( rDT.GetDate() == 0L )
744 return 0L;
745 long nDT = ( rDT.GetDayOfWeek() + 1 ) % 7;
746 nDT <<= 9;
747 nDT += ( rDT.GetYear() - 1900 ) & 0x1ff;
748 nDT <<= 4;
749 nDT += rDT.GetMonth() & 0xf;
750 nDT <<= 5;
751 nDT += rDT.GetDay() & 0x1f;
752 nDT <<= 5;
753 nDT += rDT.GetHour() & 0x1f;
754 nDT <<= 6;
755 nDT += rDT.GetMin() & 0x3f;
756 return nDT;
757 }
758

关于date - 在 .NET 中 RTF 日期戳转换为 DateTime 格式,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23127120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com