【问题标题】:Parse a String contain GregorianCalendar to Date with partern将包含 GregorianCalendar 的字符串解析为带有模式的日期
【发布时间】:2016-10-07 02:23:49
【问题描述】:

如何解析这个String

java.util.GregorianCalendar[time=1461732800330,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=32400000,dstSavings=0,useDaylight=false,transitions=10,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2016,MONTH=3,WEEK_OF_YEAR=18,WEEK_OF_MONTH=5,DAY_OF_MONTH=27,DAY_OF_YEAR=118,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=53,SECOND=20,MILLISECOND=330,ZONE_OFFSET=32400000,DST_OFFSET=0]

在 Java 中键入日期。 我的问题是它是一个字符串,我不知道如何解析。

【问题讨论】:

  • 这是一个相当愚蠢的情况。该字符串是由调用GregorianCalendar 对象方法toString 生成的。该输出用于调试目的,根本不用于数据交换。回到源头,回到那个对象,然后提取你需要的信息。要求该原始对象发送一个合理的字符串,例如标准 ISO 8601 格式。单独的提示:使用 java.time 类而不是可怕的 Date 和 Calendar 类。

标签: java date gregorian-calendar


【解决方案1】:

考虑到 String 是来自 GregorianCalendar 对象的 toString() 的输出,如问题所示,它包含构建 Date 对象所需的所有信息。

假设 Google Guava 被声明为依赖项:

import com.google.common.base.Splitter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

/**
 * Converts the string provided to a Date object
 * @param input String output of toString() from a GregorianCalendar object
 * @return Date object
 * @throws ParseException When the values received are invalid
 */
public Date convertGregorianCalendarStringOutputToDate(final String input) throws ParseException {

    // Parses the string received with a format of tuples key=value, separated by commas
    String formatted = input.replaceAll("\\]|\\/|\"","");
    formatted = formatted.replaceFirst("\\[", "");
    formatted = formatted.replaceAll("\\[", ",");

    // Creates a map of the key-values parsed
    Map<String, String> params = Splitter
                .on(",")
                .withKeyValueSeparator("=")
                .split(formatted);

    StringBuffer stringDate = new StringBuffer(params.get("YEAR"));
    stringDate.append("-")
            .append(params.get("MONTH"))
            .append("-")
            .append(params.get("DAY_OF_MONTH"))
            .append(" ")
            .append(params.get("HOUR_OF_DAY"))
            .append(":")
            .append(params.get("MINUTE"))
            .append(":")
            .append(params.get("SECOND"));

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-dd hh:mm:ss");
    return(sdf.parse(stringDate.toString()));
}

key-values对的解析取自here

【讨论】:

  • 抱歉,我有一个字符串,而不是 GregorianCalendar 对象,如何将其转换为 GregorianCalendar 对象
  • 感谢您的澄清,该方法解析为 Date 对象,因为这是问题中的初始要求。
猜你喜欢
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 2020-08-27
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多