java - 转换字符串值时对使用 SimpleDateFormat 感到困惑

标签 java date simpledateformat

我正在尝试获取一个文本框字段(由字符串 wkCreation 字段表示)并将数据转换为“YYYY-MM-DD”格式的日期字段。这是我现在使用 SimpleDateFormat 的代码:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
    Date convertdate = format.parse(wkCreation);
    wkCreationFormat = format.format(convertdate) ;
    System.out.println("Convertdate field  = " + convertdate);
    System.out.println("Creation Format field = " + wkCreationFormat);
} 
catch (ParseException e) {
    e.printStackTrace();
}

如果用户输入的日期实际上与 SimpleDateFormat 模式的格式相同,这似乎是我可以让它工作的唯一方法,这确实违背了我的目的。我试图将“mm/dd/yy”或“mm/dd/yyyy”格式的内容转换为“YYYY-MM-DD”格式。除了 Java 常识之外,我还想念她什么?我认为我对 convertdate 的定义是错误的,但不知道

最佳答案

SimpleDateFormat的目的是将String转换为Date,这并不像你想象的那么容易。如果我有日期01/02/2015,你怎么知道它是 2 月 1 日或 1 月 2 日。答案是,您不知道,您需要额外的提示(输入)来进行正确的转换 - 格式。

您可以编写自己的格式,它可以支持多种格式,例如类似于:

package q34776322;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class MultiDateFormat {

    String[] supportedFormats;

    public MultiDateFormat(String... formats) {
        supportedFormats = Arrays.copyOf(formats, formats.length);
    }

    public Date parse(String dateString) {
        Date foundDate = null;
        for (String format : supportedFormats) {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            try {
                Date tmp = sdf.parse(dateString);
                if (foundDate != null) {
                    // correct parsing, but it was at parsed before => error
                    throw new IllegalArgumentException("Unparsable date: '" + dateString + "' (multiple pattern matches)");
                } else {
                    foundDate = tmp;
                }
            } catch (ParseException pe) {

            }
        }
        if (foundDate == null) {
            throw new IllegalArgumentException("Unparsable date: '" + dateString + "' (no pattern match)");
        }
        return foundDate;
    }


    public static void main(String[] args) {
        MultiDateFormat mdf = new MultiDateFormat("yyyy-MM-dd", "dd/MM/yyyy");
        mdf.parse("2015-02-01"); // February 1st
        mdf.parse("01/02/2015"); // February 1st again

        mdf = new MultiDateFormat("MM/dd/yyyy", "dd/MM/yyyy");
        try {
            mdf.parse("01/02/2015");
        } catch (Exception e) {
            System.out.println("Expected exception");
        }
    }

}

这基本上是尝试所有格式 - 如果没有适合或有多个适合,则会抛出异常......

关于java - 转换字符串值时对使用 SimpleDateFormat 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34776322/

相关文章:

java - 我如何在不关闭虚拟机的情况下为android studio中的按钮分配功能

java - 为什么我们要在类中声明接口(interface)?

java - LocalDate.toDate( ) 返回不准确的日期

php - UTC 时钟基于服务器时间吗?

java - 在验证日期方面需要帮助

android - 仅在单元测试期间出现 DateFormat ParseException

android - 在 date.gettime() 中获取负值

java - BeanUtils.copyProperties(subclass,superclass) 对于子类字段值返回 null

java - Spring启动性能问题

python - 通过给出不是当前日期的引用日期作为参数来从文本中提取日期