我试图将一个法国日期解析为一个DateTime
对象到目前为止没有运气。有没有办法做到这一点?
String foo = "mar, 20 avr 2010 09:00:00 -0500";
我已经尝试使用不同的文化进行解析并改变线程的文化。
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA",true);
CultureInfo culture = new CultureInfo("fr-CA",true);
DateTime.Parse(foo,culture,DateTimeStyles.AdjustToUniversal);
答案 0 :(得分:6)
您只能解析(使用Parse或ParseExact)格式化DateTime时可以创建的内容。
与您的示例输入最接近的custom format specifier可能是这样的:
ddd,dd MMM yyyy HH':'mm':'ss zzz
代码:
CultureInfo culture = new CultureInfo("fr-CA", true);
var f = new DateTimeOffset(2010, 04, 20, 09, 00, 00, TimeSpan.FromHours(-5))
.ToString("ddd, dd MMM yyyy HH':'mm':'ss zzz", culture);
这会产生以下结果:
"mar., 20 avr. 2010 09:00:00 -05:00"
如您所见,短日和短月说明符(ddd
和MMM
)在名称后添加.
和时区说明符{{1} })插入zzz
。
我认为不可能欺骗ToString生成所需的输出,因此也不能用ParseExact解析结果。我猜你必须使用普通的旧字符串操作自己解析字符串。
答案 1 :(得分:3)
我认为你最接近的是
DateTime.ParseExact("mar., 01 juin 2010 12:11:53 -04:00", "ddd, dd MMM yyyy hh:mm:ss zzz", culture); // extra period after "mar"
// or
DateTime.ParseExact("mardi, 01 juin 2010 12:12:33 -04:00", "dddd, dd MMM yyyy hh:mm:sszzz", culture ); // full day name
DateTime.Parse的文档说明了
s参数必须包含 表示日期和时间 其中一种格式 DateTimeFormatInfo.GetAllDateTimePatterns() 当前文化的方法。
在我的电脑上,使用此代码,我得到以下格式。看起来您的模式不在列表中。
CultureInfo culture = new CultureInfo("fr-CA", true);
foreach( string dateTimePattern in culture.DateTimeFormat.GetAllDateTimePatterns())
{
Debug.WriteLine(dateTimePattern);
}
- YYYY-MM-DD
- YY-MM-DD
- DD-MM-YY
- yy MM dd
- DD / MM / YY
- d MMMM yyyy
- d MMM yyyy
- d MMMM yyyy HH:mm
- d MMMM yyyy H:mm
- d MMMM yyyy H'h'mm
- d MMM yyyy HH:mm
- d MMM yyyy H:mm
- d MMM yyyy H'h'mm
- d MMMM yyyy HH:mm:ss
- d MMMM yyyy H:mm:ss
- d MMMM yyyy H'h'mm
- d MMMM yyyy H:mm
- d MMM yyyy HH:mm:ss
- d MMM yyyy H:mm:ss
- d MMM yyyy H'h'mm
- d MMM yyyy H:mm
- yyyy-MM-dd HH:mm
- yyyy-MM-dd H:mm
- yyyy-MM-dd H'h'mm
- yy-MM-dd HH:mm
- yy-MM-dd H:mm
- yy-MM-dd H'h'mm
- dd-MM-yy HH:mm
- dd-MM-yy H:mm
- dd-MM-yy H'h'mm
- yy MM dd HH:mm
- yy MM dd H:mm
- yy MM dd H'h'mm
- dd / MM / yy HH:mm
- dd / MM / yy H:mm
- dd / MM / yy H'h'mm
- yyyy-MM-dd HH:mm:ss
- yyyy-MM-dd H:mm:ss
- yyyy-MM-dd H'h'mm
- yyyy-MM-dd H:mm
- yy-MM-dd HH:mm:ss
- yy-MM-dd H:mm:ss
- yy-MM-dd H'h'mm
- yy-MM-dd H:mm
- dd-MM-yy HH:mm:ss
- dd-MM-yy H:mm:ss
- dd-MM-yy H'h'mm
- dd-MM-yy H:mm
- yy MM dd HH:mm:ss
- yy MM dd H:mm:ss
- yy MM dd H'h'mm
- yy MM dd H:mm
- dd / MM / yy HH:mm:ss
- dd / MM / yy H:mm:ss
- dd / MM / yy H'h'mm
- dd / MM / yy H:mm
- d MMMM
- d MMMM
- YYYY ' - ' MM ' - ' dd'T'HH ':' 毫米 ':' ss.fffffffK
- YYYY ' - ' MM ' - ' dd'T'HH ':' 毫米 ':' ss.fffffffK
- ddd,dd MMM yyyy HH':'mm':'ss'GMT'
- ddd,dd MMM yyyy HH':'mm':'ss'GMT'
- YYYY ' - ' MM ' - ' dd'T'HH ':' 毫米 ':' SS
- HH:MM
- H:毫米
- H'h'mm
- HH:MM:SS
- H:MM:SS
- H'h'mm
- H:毫米
- yyyy' - 'MM' - 'dd HH':'mm':'ss'Z'
- d MMMM yyyy HH:mm:ss
- d MMMM yyyy H:mm:ss
- d MMMM yyyy H'h'mm
- d MMMM yyyy H:mm
- d MMM yyyy HH:mm:ss
- d MMM yyyy H:mm:ss
- d MMM yyyy H'h'mm
- d MMM yyyy H:mm
- MMMM,yyyy
- MMMM,yyyy
答案 2 :(得分:2)
日期名称和月份名称没有正确缩写,需要一段时间。如果你可以按摩字符串,那么你可以使它工作:
using System;
using System.Globalization;
class Program {
static void Main(string[] args) {
String foo = "mar., 20 avr. 2010 09:00:00 -0500";
var cvt = CultureInfo.GetCultureInfo("fr-CA").DateTimeFormat;
var dt = DateTimeOffset.Parse(foo, cvt, DateTimeStyles.RoundtripKind);
Console.WriteLine(dt);
Console.ReadLine();
}
}