如何格式化一个10位数字和2个字母到yyyyMMddHHmm的字符串,然后将其格式化为另一个字符串?

时间:2014-07-21 07:41:23

标签: c# .net

myl.Add(AllNews[i].original_time);

myl是List类型字符串,original_time也是字符串。

例如现在original_time包含字符串:"D140707T2149" 现在我想将此字符串转换为仅包含没有D和T的数字,并且格式化为yyyyMMddHHmm而没有秒。

然后最终构建一个这样的字符串:

string results = myTime.ToString("hh:mm דווח במקור בתאריך : dd.MM.yy : שעה");

希伯来词只保持不变,每次都会改变日期和时间。

这就是我试图做的事情:

IFormatProvider provider = CultureInfo.InvariantCulture;
DateTime myTime = DateTime.ParseExact(AllNews[i].original_time, "DyyMMddThhmm", provider);
string results = myTime.ToString("hh:mm דווח במקור בתאריך : dd.MM.yy : שעה");

但我在线上遇到异常:

DateTime myTime = DateTime.ParseExact(AllNews[i].original_time, "DyyMMddThhmm", provider);
  

字符串未被识别为有效的DateTime

然后我首先尝试从字符串中删除DT

AllNews[i].original_time = Regex.Replace(AllNews[i].original_time, "[^0-9]", ""); 
IFormatProvider provider = CultureInfo.InvariantCulture;
DateTime myTime = DateTime.ParseExact(AllNews[i].original_time, "yyyyMMddHHmm", provider);
string results = myTime.ToString("hh:mm דווח במקור בתאריך : dd.MM.yy : שעה");

但同样的例外情况与以前一样:

System.FormatException was unhandled
  HResult=-2146233033
  Message=String was not recognized as a valid DateTime.
  Source=mscorlib
  StackTrace:
       at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)
       at System.DateTime.ParseExact(String s, String format, IFormatProvider provider)
       at ScrollLabelTest.ListsExtractions.listtostringlist(List`1 lnl, List`1 myl) in ListsExtractions.cs:line 345
       at ScrollLabelTest.ListsExtractions.Ext(String filename) in 
ListsExtractions.cs:line 220
       at ScrollLabelTest.Form1..ctor() in Form1.cs:line 127
       at ScrollLabelTest.Program.Main() in Program.cs:line 18
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

2 个答案:

答案 0 :(得分:1)

由于您使用的是24小时制(HH),因此您需要大写21小时:

string original_time = "D140707T2149";

这样可行:

DateTime myTime = DateTime.ParseExact(original_time, "DyyMMddTHHmm", CultureInfo.InvariantCulture);

请参阅:http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx#HH_Specifier

答案 1 :(得分:0)

您需要将DT文字字符串分隔符一起用作'或“。

此外,您需要使用HH specifier代替hh specifier,因为您的小时 24小时

DateTime myTime = DateTime.ParseExact("D140707T2149" ,
                                      "'D'yyMMdd'T'HHmm",
                                      CultureInfo.InvariantCulture);

Console.WriteLine(myTime);

这里有 demonstration

hh说明符用于0112 12小时制),HH说明符用于0023