标签: datetime-parsing

使用时区信息正确解析日期字符串

我通过关键跟踪器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)
Run Code Online (Sandbox Code Playgroud)

编辑:再次考虑它减去一个小时是完全错误的,因为相应的时区目前也在夏季时间,解析的问题仍然存在

python timezone datetime datetime-parsing

5
推荐指数
1
解决办法
5016
查看次数

转换c#中的常规SQL时间格式(所有变体)?

如果我在c#字符串中有一般的sql有效日期:

(每个日期可以在内部以不同的顺序)例如:

01 feb 2010
feb 01 2010
2010 01 feb
...
...
Run Code Online (Sandbox Code Playgroud)

我想将字符串日期转换为DateTime(c#).(我希望能够转换上面列表中的每种格式)

虽然解析确切需要我3!组合,有没有更好的解决方案?

.net c# datetime datetime-format datetime-parsing

5
推荐指数
1
解决办法
733
查看次数

将此类字符串解析为DateTime - "2013年3月22日星期五"(C#)

我有一大堆这样的文字:

....建议2013年3月22日星期五有可能被宣布为一天.....

我必须找到并解析DateTime(2013年3月22日星期五).我可以找到它并使用DateTime.TryParse来获取几乎所有东西,但是序数后缀(st,nd,rd,th)让我失望.

当我在调用TryParse方法之前构造格式字符串时,是否有任何通配符我可以用来考虑这些后缀?还是其他任何建议?

谢谢!

c# datetime-parsing

5
推荐指数
1
解决办法
477
查看次数

我该如何解析这个日期时间字符串?

我无法弄清楚,我哪里出错了?

我得到了以下日期时间字符串,需要将其解析为datetime:

string timestr = "1/20/2014 12:05:16 AM"
Run Code Online (Sandbox Code Playgroud)

我试图像这样解析它:

DateTime.ParseExact( timestr,
                     "MM/dd/yyyy hh:mm:ss tt",
                     null);
Run Code Online (Sandbox Code Playgroud)

当试图这样做时它返回

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

有提示吗?

c# string datetime datetime-parsing

5
推荐指数
1
解决办法
207
查看次数

如何将长毫秒(纳秒)部分的字符串解析为 DateTime?

我试图找出以下给定日期时间文字的正确字符串格式:

18-JUN-13 12.17.36.000000000
Run Code Online (Sandbox Code Playgroud)

使用MSDN,我设法编写了以下格式:

"d'-'MMM'-'y'T'h'.'m'.'s'.'fff"

但使用时DateTime.ParseExact,解析失败并显示FormatExceptionString 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);
Run Code Online (Sandbox Code Playgroud)

.net c# string datetime datetime-parsing

5
推荐指数
1
解决办法
4353
查看次数

Jackson / JavaTimeModule-处理不同的时区偏移量格式

我正在调用一个API(使用Jersey),该API返回具有区域偏移量的Date Time。有时数据采用以下格式:

"2017-03-28T14:40:00+01:00"
Run Code Online (Sandbox Code Playgroud)

有时是这种格式(我对此无能为力)

"2017-03-28T14:40:00+0100"  (where the ':' in timezone offset is missing).
Run Code Online (Sandbox Code Playgroud)

我想将它们编组为java.time.ZonedDateTime对象。我JavaTimeModule()在泽西岛使用ObjectMapper

objectMapper.registerModule(new JavaTimeModule());
Run Code Online (Sandbox Code Playgroud)

问题:是否有任何方法可以使对象映射器足够灵活以处理in +01:00或in的时区偏移+0100

java jersey jackson datetime-parsing java-time

5
推荐指数
1
解决办法
1688
查看次数

Java 8解析ISO-8601日期忽略时区的存在(或不存在)

我的应用程序应该能够解析忽略时区的日期(我总是知道它是UTC).问题是日期可能会出现以下两种形式 -

2017-09-11T12:44:07.793Z

0001-01-01T00:00:00

我可以解析第一个使用LocalDateTime,第二个使用Instant类.有没有办法使用单一机制?

PS我试图避免Z输入字符串末尾的硬编码

datetime iso8601 datetime-parsing java-8 java-time

5
推荐指数
1
解决办法
1074
查看次数

具有灵活后备值的java.time DateTimeFormatter解析

我正在尝试将一些代码从joda时间移植到Java时间。

JodaTime可以这样指定当年的后备值

parser.withDefaultYear((new DateTime(DateTimeZone.UTC)).getYear()).parseDateTime(text);
Run Code Online (Sandbox Code Playgroud)

不管解析器的外观如何(如果包含一年或不包含一年),都将对其进行解析。

那里的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"));
}
Run Code Online (Sandbox Code Playgroud)

所需的结果:测试应解析字符串并通过(“呈绿色”)。

观察到的结果:测试的最后一行引发异常,并显示以下消息和堆栈跟踪。

文本'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) …
Run Code Online (Sandbox Code Playgroud)

java time datetime datetime-parsing java-time

5
推荐指数
2
解决办法
1507
查看次数

日期字符串到纪元秒 (UTC)

我想将作为字符串 (UTC) 给出的日期时间解析为自epoch以来的秒数。示例(参见EpochConverter):

2019-01-15 10:00:00 -> 1547546400
Run Code Online (Sandbox Code Playgroud)

问题

的简单的解决方案,其也接受在非常相关的问题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)
Run Code Online (Sandbox Code Playgroud)

std::mktime由于时区的原因,似乎把时间弄乱了。我正在执行来自 的代码UTC+01:00,但我们在那个日期也有 DST,所以它+2在这里。

tm节目15hour后场std::get_time。一进门就乱了std::mktime

同样,该字符串将被解释为UTC时间戳,不应涉及任何时区。但是我想出的所有解决方案似乎都将其解释为本地时间戳并为其添加偏移量。


限制

我对此有一些限制:

  • C++17
  • 平台/编译器无关
  • 没有环境变量黑客攻击
  • 没有外部库(如 …

c++ date utc epoch datetime-parsing

5
推荐指数
1
解决办法
1444
查看次数

java.text.ParseException:无法解析的日期:“...”

我使用此代码收到此错误:

SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM HH:mm yyyy",myDateFormatSymbols);
sdf.parse("????????? 12 ??????? 07:00 2021");
Run Code Online (Sandbox Code Playgroud)

"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[]{...};
        }
}
Run Code Online (Sandbox Code Playgroud)

所有月份和工作日都正常工作,似乎这个错误只发生在星期一。

java dayofweek simpledateformat datetime-parsing java-time

5
推荐指数
2
解决办法
495
查看次数