gpt4 book ai didi

java - 从字符串创建 Java 日期,反之亦然

转载 作者:行者123 更新时间:2023-12-01 13:22:22 25 4
gpt4 key购买 nike

我有一个整数格式(YYYYMMDD)日期。以及 start_time 作为 String (HH:mm 24 小时制)。以及time_duration(以小时为单位)作为double

int date = 20140214;
String start_time = "14:30";
double duration = 50.30;

我想使用这 3 个值并创建 2 个 Java 日期对象。一种是start_date,另一种是end_date。它们的格式应为 YYYY-MM-DD HH:mm

然后在我得到 2 个数据字符串后,例如 YYYY-MM-DD HH:mm。我怎样才能获得那些以前的变量。 日期开始时间持续时间

这是我的尝试。

public void solve() throws IOException {
int date = 20140214;
String start_time = "14:30";
double duration = 24.50;
String startDate = "";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
startDate = getDate(date) + " " + start_time;
try {
Date start_Date = df.parse(startDate);
Date end_Date = new Date(start_Date.getTime()+(int)(duration*3600*1000));
System.out.println(df.format(start_Date));
System.out.println(df.format(end_Date));

} catch (ParseException ex) {

}

}
public String getDate(int dateInt) {
String date = "";
String dateIntString = String.valueOf(dateInt);
date = date + dateIntString.substring(0, 4) + "-";
date = date + dateIntString.substring(4, 6) + "-";
date = date + dateIntString.substring(6, 8);
return date;
}

有什么简单的方法可以实现吗? ?或者除了我已经使用过的功能之外,我还可以使用一些内置功能?

最佳答案

日期时间的奇怪数据类型

使用:

  • 表示日历日期的数字的 int
  • 表示时间数字的字符串
  • 表示小数小时持续时间的 double 值

……都是不寻常的方法。可能不是处理日期时间值的最明智选择。

避免 java.util.Date/Calendar

要知道,捆绑类 java.util.Date 和 .Calendar 是出了名的麻烦,应该避免。使用 Joda-Time或新的java.time.* package ( Tutorial ) 在 Java 8 中。并熟悉好用的ISO 8601标准。

时区

您的问题和示例忽略了时区的关键问题。处理没有时区的日期时间数据就像在不知道字符编码的情况下处理文本文件一样。不好。

使用proper time zone names创建时区对象。避免使用非标准的三字母代码。

乔达时间

在 Joda-Time 中,DateTime 对象类似于 java.util.Date 对象,但实际上知道自己指定的时区。

Joda-Time 提供三个类来表示时间跨度:Period、Duration 、和间隔。

Interval类使用“半开放”方法,其中开头是包容性的,结尾是排除性的。这种方法非常适合处理时间跨度和比较。寻找方便的 containsabutsoverlapgap 方法。

int dateInput = 20140214;
String start_timeInput = "14:30";
double durationInput = 50.30;

// Clean up these inputs.
String datePortion = Integer.toString( dateInput );
String input = datePortion + " " + start_timeInput;
DateTimeFormatter formatterInput = DateTimeFormat.forPattern( "yyyyMMdd HH:mm");

// Specify the time zone this date-time represents.
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" ); // Or, DateTimeZone.UTC
DateTime dateTime = formatterInput.withZone( timeZone ).parseDateTime( input );

// Convert fractional hours to milliseconds, then milliseconds to a Duration object.
long millis = ( 60L * 60L * (long)(1000L * durationInput) ); // 1 hour = 60 minutes * 60 seconds * 1000 milliseconds.
Duration duration = new Duration( millis );

Interval interval = new Interval( dateTime, duration );

DateTimeFormatter formatterOutput = DateTimeFormat.forStyle( "MM" ).withLocale( Locale.FRANCE );
String description = "De " + formatterOutput.print( interval.getStart() ) + " à " + formatterOutput.print( interval.getEnd() );

转储到控制台...

System.out.println( "input: " + input );
System.out.println( "dateTime: " + dateTime );
System.out.println( "duration: " + duration ); // Format: PnYnMnDTnHnMnS (from ISO 8601)
System.out.println( "interval: " + interval ); // Format: <start>/<end> (from ISO 8601)
System.out.println( "description: " + description );

运行时...

input: 20140214 14:30
dateTime: 2014-02-14T14:30:00.000+01:00
duration: PT181080S
interval: 2014-02-14T14:30:00.000+01:00/2014-02-16T16:48:00.000+01:00
description: De 14 févr. 2014 14:30:00 à 16 févr. 2014 16:48:00

关于java - 从字符串创建 Java 日期,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21952876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com