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

从字符串创建Java日期,反之亦然,java,string-conversion,java.util.date,Java,String Conversion,Java.util.date,我有一个日期整数格式(YYYYMMDD)。以及开始时间作为字符串(HH:mm 24小时制)。而时长以小时表示为双倍 int date = 20140214; String start_time = "14:30"; double duration = 50.30; 我想使用这3个值并创建2个Java日期对象。一个是开始日期,另一个是结束日期。它们的格式应为YYYY-MM-DD HH:MM 然后在我得到两个数据字符串之后,比如YYYY-MM-DD HH:MM。我如何才能获得这些先前的变量日期,开

我有一个
日期
整数格式
(YYYYMMDD)。以及
开始时间
作为
字符串
(HH:mm 24小时制)。而
时长
小时表示为
双倍

int date = 20140214;
String start_time = "14:30";
double duration = 50.30;
我想使用这3个值并创建2个Java日期对象。一个是
开始日期
,另一个是
结束日期
。它们的格式应为
YYYY-MM-DD HH:MM

然后在我得到两个数据字符串之后,比如
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;
}

有什么简单的方法吗?或者一些我可以使用的内置功能,而不是我使用过的功能?

您有很多日期表示

如果有疑问,我通常会尽快到达unix标准时间(自1970年起为毫秒)

在本例中,将整数日期转换为字符串,首先读取四个数字作为年,两个数字作为月,最后两个数字作为日,然后在24小时内执行类似的操作,并由此创建java.util.date,如下所示:

SimpleDateFormat dateParser=new SimpleDateFormat("yyyyMMdd HH:mm"); //please double check the syntax for this guy...
String yyyyMmDd = date.toString();
String fullDate = yyyyMmDd + " " + start_time;
java.util.Date startDate = dateParser.parse(fullDate);
long startTimeInMillis = startDate.getTime();
final long MILLISECONDS_PER_HOUR = 1000*60*60;
long durationInMillis = (long)duration*MILLISECONDS_PER_HOUR;
java.util.Date endDate = new java.util.Date(startTimeInMillis + durationInMillis);
不要错过Java 8新的、最终改进的日期处理,名为
Java.time

日期时间的奇怪数据类型
 you can write like
 int date = 20140214;
 String s=""+date;  
 Date date = new SimpleDateFormat("yyyyMMdd").parse(s);
使用:

  • 表示日历日期数字的整数
  • 表示一天中的时间数字的字符串
  • 双精度表示小数小时的持续时间
…都是不寻常的方法。在处理日期时间值时,可能不是最明智的选择

避免java.util.Date/Calendar 要知道,java.util.Date和.Calendar捆绑类是出了名的麻烦,应该避免。在中使用或新的()。并熟悉handy标准

时区 你的问题和例子忽略了时区这一关键问题。处理没有时区的日期时间数据就像处理不知道字符编码的文本文件一样。不太好

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

乔达时间 在Joda Time中,DateTime对象类似于java.util.Date对象,但实际上知道自己分配的时区

JodaTime提供了三个类来表示时间跨度:Period和Interval

该类使用“半开放”方法,其中开始是包含的,结束是独占的。这种方法适用于处理时间跨度和比较。查找方便的
包含
邻接
重叠
间隙
方法

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 );   

请给我们一个尝试,这样我们可以帮助你。