【问题标题】:Concat Two Strings then Convert to Date in Java连接两个字符串,然后在 Java 中转换为日期
【发布时间】:2012-10-02 01:28:03
【问题描述】:

我需要在 Java 中将两个字符串连接在一起,然后格式化字符串并使其成为 Date 对象。

我目前拥有的两个字符串是31/01/201220:00,我想做类似的事情:

try {
  DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm");
  Date result = new Date();
  String tempDate = date + " " + f;
  result = formatter.parse(tempDate);
} catch (ParseException e) {
  ...etc
}

谁能帮我弄清楚如何将两个字符串加在一起。任何帮助将不胜感激!

【问题讨论】:

  • 什么不起作用?对我来说似乎很好......
  • @PetrMensik 是的,正如人们所建议的那样,我将日期从 - 格式化为 / 是一个愚蠢的错误
  • 您不需要预先设置“new Date()”,因为 formatter.parse() 创建了一个新实例。

标签: java string date concatenation


【解决方案1】:

tl;博士

LocalDateTime.of( 
    LocalDate.parse( 
        "31/01/2012" , 
        DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) 
    ) , 
    LocalTime.parse( "20:00" ) 
).atZone( ZoneId.of( "Africa/Tunis" ) ) 

2012-01-31T20:00+01:00[非洲/突尼斯]

看到这个code run live at IdeOne.com

使用 java.time

您正在使用麻烦的旧日期时间类,现在已被 java.time 类所取代。

您不需要连接字符串。解析每一个,一个作为LocalDate,一个作为LocalTime

DateTimeFormatter fDate = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.format( "31/01/2012" , fDate ) ;

LocalTime lt = LocalTime.parse( "20:00" ) ; // Built-in formatter handles standard ISO 8601 formats.

您可以将这两个部分组合成LocalDateTimeLocalDateTime 没有 time zoneoffset-from-UTC 的概念。

LocalDateTime ldt = LocalDateTime.of( ld , lt ) ;

我们没有关于与 UTC 的偏移量或时区的指示。所以我们确实没有有一个特定的时刻,关于可能的时刻的想法。例如,晚上 8 点在新西兰 (Pacific/Auckland) 比在印度 (Asia/Kolkata) 早得多,而在法国 (Europe/Paris) 晚几个小时。

要确定特定时刻,我们必须将 LocalDateTime 放在时区的上下文中。也许您打算将那一刻用于 UTC。

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;

或者你的意思是魁北克时代。

continent/region 的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用 3-4 个字母的缩写,例如 ESTIST,因为它们不是真正的时区,没有标准化,甚至不是唯一的 (!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;

关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

从哪里获得 java.time 类?

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

【讨论】:

    【解决方案2】:

    代码看起来不错。 改正格式就好 应该是

    "dd/MM/yyyy HH:mm"

    【讨论】:

      【解决方案3】:

      你的连接很好。但是您的格式似乎是"dd/MM/yyyy HH:mm"

      【讨论】:

        猜你喜欢
        • 2015-04-27
        • 2013-01-19
        • 1970-01-01
        • 2011-12-14
        • 1970-01-01
        • 1970-01-01
        • 2012-04-14
        • 2022-01-10
        相关资源
        最近更新 更多