在Java中将字符串传递给日期

时间:2015-12-22 23:00:25

标签: java

我看到这在Java中已弃用:

Date origin = new Date("July 5, 2318 12:00:00");

我想弄清楚的是我能做些什么才能获得完全相同的功能。我的例子的完整背景是:

Date origin = new Date("July 5, 2318 12:00:00");
double stardatesPerYear = 56844.9 * 34367056.4;
double milliseconds = origin.getTime() + stardatesPerYear;
Date dateResult = new Date();
dateResult.setTime((long)milliseconds);

结果是dateResult将Date对象具有以下字符串表示形式:

5月31日星期六12:24:44 CDT 2380

我并不关心日期的确切格式,因为我是结果的准确性以及它可以被解析的事实。

我见过使用CalendarSimpleDateFormat的引用,但这些似乎都没有给我相同的输出,可能是因为我做错了。

可能重复更新:

我不知道我的问题是否像建议的那样重复,但可能是。我试过这样的例子:

String string = "July 5, 2318";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
try {
   Date date = format.parse(string);
} catch (ParseException e) {
   e.printStackTrace();
}

替换原来的Date origin声明似乎很多。

我想我感到好奇的是给出了我的完整代码示例,即:

Date origin = new Date("July 5, 2318 12:00:00");
double stardatesPerYear = 56844.9 * 34367056.4;
double milliseconds = origin.getTime() + stardatesPerYear;
Date dateResult = new Date();
dateResult.setTime((long)milliseconds);

替换代码第一行的最有效和最有效的代码是什么,因为我指出我的第一行使用了已弃用的功能?

3 个答案:

答案 0 :(得分:1)

使用SimpleDateFormat一行更改为两行:

DateFormat dateformat = new SimpleDateFormat("MMMM dd, yyyy hh:mm:ss", Locale.US); Date date = dateformat.parse("July 5, 2318 12:00:00");

获得相同的输出:

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy hh:mm:ss", Locale.US); Date date = fmt.parse("July 5, 2318 12:00:00"); date.setTime(date.getTime() + (long)stardatesPerYear);

3行与4行(我不计算stardatesPerYear初始化):)

答案 1 :(得分:1)

这适用于在Java 8中测试:

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM d, yyyy HH:mm:ss");
    Date origin = Date.from(LocalDateTime.parse("July 5, 2318 12:00:00", dtf).toInstant(ZoneOffset.UTC));

答案 2 :(得分:0)

您可以使用以下任何一种方式:

1)

SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd yyyy hh:mm:ss");
String dateInString = "July 5, 2318 12:00:00";
Date date = sdf.parse(dateInString);

2)

Calendar calendar = new GregorianCalendar(2318,Calendar.JULY,5, 12, 0, 0);
Date date = calendar.getTime();

3)

Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, 2318);
calendar.set(Calendar.MONTH, Calendar.JULY);
calendar.set(Calendar.DAY_OF_MONTH, 5);
calendar.set(Calendar.HOUR, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);