我通过关键跟踪器API收到这样的格式化日期字符串:"2012/06/05 17:42:29 CEST"
我想将此字符串转换为UTC日期时间对象,看起来python-dateutil无法识别该时区,pytz也不知道它.
我担心我最好的选择是用CET替换字符串中的CEST,但这感觉非常错误.有没有其他方法可以将夏令时字符串解析为我找不到的UTC日期时间对象?
pytz.timezone('CEST')
# -> pytz.exceptions.UnknownTimeZoneError: 'CEST'
dateutil.parser.parse("2012/06/05 17:42:29 CEST")
# -> datetime.datetime(2012, 6, 5, 17, 42, 29)
编辑:再次考虑它减去一个小时是完全错误的,因为相应的时区目前也在夏季时间,解析的问题仍然存在
如果我在c#字符串中有一般的sql有效日期:
(每个日期可以在内部以不同的顺序)例如:
01 feb 2010
feb 01 2010
2010 01 feb
...
...
我想将字符串日期转换为DateTime(c#).(我希望能够转换上面列表中的每种格式)
虽然解析确切需要我3!组合,有没有更好的解决方案?
我有一大堆这样的文字:
....建议2013年3月22日星期五有可能被宣布为一天.....
我必须找到并解析DateTime(2013年3月22日星期五).我可以找到它并使用DateTime.TryParse来获取几乎所有东西,但是序数后缀(st,nd,rd,th)让我失望.
当我在调用TryParse方法之前构造格式字符串时,是否有任何通配符我可以用来考虑这些后缀?还是其他任何建议?
谢谢!
我无法弄清楚,我哪里出错了?
我得到了以下日期时间字符串,需要将其解析为datetime:
string timestr = "1/20/2014 12:05:16 AM"
我试图像这样解析它:
DateTime.ParseExact( timestr,
                     "MM/dd/yyyy hh:mm:ss tt",
                     null);
当试图这样做时它返回
"字符串未被识别为有效的DateTime"
有提示吗?
我试图找出以下给定日期时间文字的正确字符串格式:
18-JUN-13 12.17.36.000000000
使用MSDN,我设法编写了以下格式:
"d'-'MMM'-'y'T'h'.'m'.'s'.'fff"
但使用时DateTime.ParseExact,解析失败并显示FormatException:String was not recognizes as a valid DateTime。
我的代码:
DateTime.ParseExact("18-JUN-13 12.17.36.000000000", "d'-'MMM'-'y'T'h'.'m'.'s'.'fff", null);
我正在调用一个API(使用Jersey),该API返回具有区域偏移量的Date Time。有时数据采用以下格式:
"2017-03-28T14:40:00+01:00"
有时是这种格式(我对此无能为力)
"2017-03-28T14:40:00+0100"  (where the ':' in timezone offset is missing).
我想将它们编组为java.time.ZonedDateTime对象。我JavaTimeModule()在泽西岛使用ObjectMapper。
objectMapper.registerModule(new JavaTimeModule());
问题:是否有任何方法可以使对象映射器足够灵活以处理in +01:00或in的时区偏移+0100?
我的应用程序应该能够解析忽略时区的日期(我总是知道它是UTC).问题是日期可能会出现以下两种形式 -
2017-09-11T12:44:07.793Z
0001-01-01T00:00:00
我可以解析第一个使用LocalDateTime,第二个使用Instant类.有没有办法使用单一机制?
PS我试图避免Z输入字符串末尾的硬编码
我正在尝试将一些代码从joda时间移植到Java时间。
JodaTime可以这样指定当年的后备值
parser.withDefaultYear((new DateTime(DateTimeZone.UTC)).getYear()).parseDateTime(text);
不管解析器的外观如何(如果包含一年或不包含一年),都将对其进行解析。
那里的java.time变得更加严格。即使有DateTimeFormatterBuilder.parseDefaulting()允许您指定后备方法的方法,也只有在您要解析的日期中未指定该特定字段或将其标记为可选时,该方法才有效。
如果您对传入的日期格式没有任何控制权(由用户提供),则这将使调用时变得非常困难parseDefaulting。
是否有任何解决方法,可以在其中指定通用回退日期(如果未指定其值,则格式化程序将使用其值)之类的东西,或者在格式化程序中指定后,如何配置未使用的回退值?
以下是最小,完整和可验证的示例。
public static DateTimeFormatter ofPattern(String pattern) {
    return new DateTimeFormatterBuilder()
        .appendPattern(pattern)
        .parseDefaulting(ChronoField.YEAR, 1970)
        .toFormatter(Locale.ROOT);
}
public void testPatterns() {
    // works
    assertThat(LocalDate.from(ofPattern("MM/dd").parse("12/06")).toString(), is("1970-12-06"));
    assertThat(LocalDate.from(ofPattern("uuuu/MM/dd").parse("2018/12/06")).toString(), is("2018-12-06"));
    // fails with exception, as it uses year of era
    assertThat(LocalDate.from(ofPattern("yyyy/MM/dd").parse("2018/12/06")).toString(), is("2018-12-06"));
}
所需的结果:测试应解析字符串并通过(“呈绿色”)。
观察到的结果:测试的最后一行引发异常,并显示以下消息和堆栈跟踪。
文本'2018/12/06'无法解析:发现冲突:1970年与2018年不同
Exception in thread "main" java.time.format.DateTimeParseException: Text '2018/12/06' could not be parsed: Conflict found: Year 1970 differs from Year 2018
    at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1959)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1820)
    at com.ajax.mypackage.MyTest.testPatterns(MyTest.java:33) …我想将作为字符串 (UTC) 给出的日期时间解析为自epoch以来的秒数。示例(参见EpochConverter):
2019-01-15 10:00:00 -> 1547546400
的简单的解决方案,其也接受在非常相关的问题C ++时间字符串从历元转换为秒那张std::string -> std::tm -> std::time_t使用std::get_time,然后std::mktime:
std::tm tm;
std::stringstream ss("2019-01-15 10:00:00");
ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
std::time_t epoch = std::mktime(&tm);
// 1547546400 (expected)
// 1547539200 (actual, 2 hours too early)
但std::mktime由于时区的原因,似乎把时间弄乱了。我正在执行来自 的代码UTC+01:00,但我们在那个日期也有 DST,所以它+2在这里。
该tm节目15的hour后场std::get_time。一进门就乱了std::mktime。
同样,该字符串将被解释为UTC时间戳,不应涉及任何时区。但是我想出的所有解决方案似乎都将其解释为本地时间戳并为其添加偏移量。
我对此有一些限制:
我使用此代码收到此错误:
SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM HH:mm yyyy",myDateFormatSymbols);
sdf.parse("????????? 12 ??????? 07:00 2021");
是
"Monday 12 April 07:00 2021"。问题是,每当我将日期从星期一更改为星期二 ( "????????") 时,我都不会收到此错误,并且代码有效。这是代码myDateFormatSymbols:
private final static DateFormatSymbols myDateFormatSymbols = new DateFormatSymbols(){
        @Override
        public String[] getWeekdays(){
             return new String[]{"?????????","????????", "??????", "??????", "???????", "??????", "??????"};
        }
        @Override
        public String[] getMonths() {
            return new String[]{...};
        }
}
所有月份和工作日都正常工作,似乎这个错误只发生在星期一。