【问题标题】:How to Subtracting 7hrs from a String time?如何从字符串时间中减去 7 小时?
【发布时间】:2017-06-06 06:16:37
【问题描述】:

我需要将时间从 GMT 转换为 PST,为此我试图从时间中减去 7 小时。问题是时间存储在字符串中,我不确定如何从字符串时间中减去 7 小时。 displayDateString 给了我日期和时间,它是一个字符串。我正在尝试以下方法,但它没有按我需要的方式工作。

代码更改之前

 public static String formatDate(String strDate, String inputFormat, String outputFormat) {
    Date date = convertStringToDate(strDate,inputFormat);
    String displayDateString = formatDate(date, outputFormat);
    DateFormat pstFormat = new SimpleDateFormat();
    return displayDateString;
}

以上代码输出:06/02/17 07:19 PM

代码更改后

public static String formatDate(String strDate, String inputFormat, String outputFormat) {
    Date date = convertStringToDate(strDate,inputFormat);
    String displayDateString = formatDate(date, outputFormat);

    DateFormat pstFormat = new SimpleDateFormat();
    /*TimeZone pstZone = TimeZone.getTimeZone( "PST" );
    pstFormat.setTimeZone( pstZone );
    displayDateString = pstFormat.format(date);*/

    Calendar cal = Calendar.getInstance();
    cal = Calendar.getInstance();
    cal.add( Calendar.HOUR, -7 );
    displayDateString = pstFormat.format( cal.getTime() );
    return displayDateString;
}

public static Date convertStringToDate(String strDate, String inputFormat) {
    SimpleDateFormat dateFormat = null;
    Date date = null;
    boolean formatChagned = false;
    try {
        if(!StringUtils.isSet(strDate)){
            return date;
        }
        if(strDate.indexOf("/")>0 && inputFormat.indexOf("-")>=0){
            inputFormat = inputFormat.replaceAll("-", "/");
            formatChagned=true;
        }else if (strDate.indexOf("-")>0 && inputFormat.indexOf("/")>=0){
            inputFormat = inputFormat.replaceAll("/", "-");
            formatChagned=true;
        }

        dateFormat = new SimpleDateFormat(inputFormat);
        dateFormat.setLenient(false);
        date = dateFormat.parse(strDate);
    } catch (Exception exception) {
        log.error("Given date to parse:"+strDate);
        log.error("Given Input Date Format:"+inputFormat);

        if(formatChagned){
            log.error("Given Input Date Format is incorrcet and it is modified as :"+inputFormat);              
        }

        log.error(exception);
        log.error("DateUtil.convertStringToDate :Parse exception while parsing,"+strDate+" using format :"+inputFormat);
        date = null;
    }
    return date;
}

我添加了日历部分以某种方式从现有时间中减去 7 小时。这不起作用。

【问题讨论】:

  • 显示其他函数:convertStringToDateformatDate(2-arg 版本)。
  • 仅供参考,“请不要标记它,因为我真的需要解决这个问题……”是标记标记的好方法。提出一个好问题的责任完全在于你,而不是读者原谅你的错误。
  • 我已经编辑了我的问题。

标签: java


【解决方案1】:

您需要在操作之前设置日历日期:

cal.setTime(date);

之前:

cal.add( Calendar.HOUR, -7 );

而且你似乎有一些多余的代码,比如调用 Calendar getInstance 两次。

【讨论】:

  • 它确实减去了。谢谢艾萨克。
【解决方案2】:

你可以改变如下

Calendar cal = Calendar.getInstance();
cal.setTime(new Date(displayDateString));
cal.add(Calendar.HOUR, -7);

虽然new Date(displayDateString) 是不推荐使用的功能

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多