C#日期时间格式YYMMDDhhmmsstnnp

C#日期时间格式YYMMDDhhmmsstnnp,c#,datetime,C#,Datetime,我目前正在使用第三方DLL来运行我的一些程序 直到最近,我才决定将它转移到运行OS Windows server 2016的新服务器上 图书馆突然弹出一个错误,说: System.FormatException:格式不正确。'YYMMDDhhmmsstnnp' 我看了这里,但看不到t、nn和p的任何东西 有人知道上面的格式并且知道什么是t nn和p吗 我该如何解决这个问题呢 谢谢好的,在做了一点侦查工作(嗯,搜索)之后,我相信您可能正在使用SMPPClient库,错误来自。它并没有试图将其作为一

我目前正在使用第三方DLL来运行我的一些程序

直到最近,我才决定将它转移到运行OS Windows server 2016的新服务器上

图书馆突然弹出一个错误,说:

System.FormatException:格式不正确。'YYMMDDhhmmsstnnp'

我看了这里,但看不到t、nn和p的任何东西

有人知道上面的格式并且知道什么是t nn和p吗

我该如何解决这个问题呢


谢谢

好的,在做了一点侦查工作(嗯,搜索)之后,我相信您可能正在使用
SMPPClient
库,错误来自。它并没有试图将其作为一个格式字符串使用——它只是将其作为字符串的预期格式进行报告(毫无帮助,IMO)

它实际上是用这个正则表达式检查它:

"^[0-9][0-9][0-1][0-9][0-3][0-9][0-2][0-9][0-5][0-9][0-5][0-9][0-9][0-4][0-9][\\+\\-R]$"
说明了格式:

  • “YY”年份的最后两位数字(00-99)
  • “毫米”月(01-12)
  • “DD”日(01-31)
  • 小时(00-23)
  • 分钟(00-59)
  • “ss”秒(00-59)
  • 十分之t秒(0-9)
  • 本地时间(以前13个八位字节表示)与UTC(世界时常数)时间(00-48)之间的“nn”时差,以四分之一小时为单位
  • “p”:
    “+”本地时间是以四分之一小时为单位的 与UTC时间的关系。
    “-”当地时间以四分之一小时为单位,以四分之一小时为单位延迟 与UTC时间的关系
这不是我希望.NET中的常规格式字符串能够处理的

我建议你的下一步应该是:

  • 找出它试图解析的值(我理解,这可能很棘手)
  • 找出该值的来源(它是在代码的其他地方生成的,可能是在您的代码中生成的,还是源于系统之外的数据?)
  • 编写一个小程序,在工作机器和有问题的机器上都执行该正则表达式,以确定问题是正则表达式行为发生了变化,还是正在解析的数据发生了变化

我猜某个地方的一些代码正在使用常规的
DateTime
格式来创建这个字符串的一部分,然后在最后一部分对其进行调整。。。在你的新系统上,有一些语言环境的变化会影响到一些事情。例如,即使您使用显式格式进行格式化,它仍将使用其使用的任何文化的日历系统-如果您意外地格式化为非公历,这肯定会影响事情。(常见的修复方法是在格式化机器可读字符串时显式使用
CultureInfo.InvariantCulture

好的,在做了一些检测工作(好的,搜索)之后,我相信您可能正在使用
SMPPClient
库,错误来自。它并没有试图将其作为一个格式字符串使用——它只是将其作为字符串的预期格式进行报告(毫无帮助,IMO)

它实际上是用这个正则表达式检查它:

"^[0-9][0-9][0-1][0-9][0-3][0-9][0-2][0-9][0-5][0-9][0-5][0-9][0-9][0-4][0-9][\\+\\-R]$"
说明了格式:

  • “YY”年份的最后两位数字(00-99)
  • “毫米”月(01-12)
  • “DD”日(01-31)
  • 小时(00-23)
  • 分钟(00-59)
  • “ss”秒(00-59)
  • 十分之t秒(0-9)
  • 本地时间(以前13个八位字节表示)与UTC(世界时常数)时间(00-48)之间的“nn”时差,以四分之一小时为单位
  • “p”:
    “+”本地时间是以四分之一小时为单位的 与UTC时间的关系。
    “-”当地时间以四分之一小时为单位,以四分之一小时为单位延迟 与UTC时间的关系
这不是我希望.NET中的常规格式字符串能够处理的

我建议你的下一步应该是:

  • 找出它试图解析的值(我理解,这可能很棘手)
  • 找出该值的来源(它是在代码的其他地方生成的,可能是在您的代码中生成的,还是源于系统之外的数据?)
  • 编写一个小程序,在工作机器和有问题的机器上都执行该正则表达式,以确定问题是正则表达式行为发生了变化,还是正在解析的数据发生了变化

我猜某个地方的一些代码正在使用常规的
DateTime
格式来创建这个字符串的一部分,然后在最后一部分对其进行调整。。。在你的新系统上,有一些语言环境的变化会影响到一些事情。例如,即使您使用显式格式进行格式化,它仍将使用其使用的任何文化的日历系统-如果您意外地格式化为非公历,这肯定会影响事情。(常见的修复方法是在格式化机器可读字符串时显式使用
CultureInfo.InvariantCulture

我也不识别YY或DD
t
是有效的,并且表示(至少在我的区域性中)一个单个字符的am/pm指示器。这不需要太多说明。您可能需要使用ILSpy或Reflector对DLL进行反向工程,并了解更多信息。或者您可以尝试检查服务器配置中的差异,特别是全球化设置,以查看是否出现任何明显的问题。检查服务器的日期时间设置。系统日期格式是弹出的错误。我可以想到的另一种方法是在应用程序启动时设置线程区域性。将日期格式设置为您期望的格式。没有任何设置,.NET默认为操作系统格式。我询问DB可能听起来很奇怪。但该应用程序是否访问数据库,如果是,是否尝试使用新的sql server DB?@JohnWu-同意你的看法-我的假设是-OP说,在他搬到server 2016之前,库是可以使用的。因此,我建议确认外部因素是否正常。我也不认识YY或DD。