如何使用日期字符串和时间字符串创建DateTime字符串?

时间:2013-09-04 12:53:41

标签: java android android-date

我想使用三个字符串创建一个格式为2013-08-30T15:06:00的DateTime字符串。一个字符串包含日期"30-aug-2013",第二个字符串包含时间"15:06",最后一个字符串包含天数{{1}现在我想使用这三个字符串创建一个像"2"这样的结果字符串。天数值是在过去创建日期,因此在这种情况下,日期从 30th aug 变为 28 aug

解决方案我尝试过:

"2013-08-28T15:06:00"

在上面的解决方案中public String getFormattedDate(String date, String selectedDays, String time) { String dtStart = date; SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy"); try { Date dateObject = format.parse(dtStart); System.out.println(date); Calendar calendar = new GregorianCalendar(); calendar.setTime(dateObject); calendar.add(Calendar.DAY_OF_MONTH, Integer.valueOf(selectedDays)); System.out.println(calendar.getTime()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 将添加日期,而不是从日期中删除天数。此外,我不知道如何使用时间字符串在日期对象上设置它。 / p>

4 个答案:

答案 0 :(得分:1)

如果您的时间String始终采用该格式,则需要使用time.split(":")来获取小时和分钟。

您可能还想指定输出格式,而不是使用Locale默认格式。

添加减号以减去而不是添加Calendar.add()

您的代码使用dd-MM-yyyy,但您的月份部分是08-aug-2013,应使用dd-MMM-yyyy进行解析。

这应该按照你指定的方式输出

  public static String getFormattedDate(String date, String selectedDays, String time) {
    String dtStart = date;
    Calendar calendar = new GregorianCalendar();
    calendar.clear();
    SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy"); // This should be MMM and not MM according to the date format 08-aug-2013
    try {
      Date dateObject = format.parse(dtStart);
      System.out.println(date);
      calendar.setTime(dateObject);
      String[] hoursMins = time.split(":");
      int hours = Integer.valueOf(hoursMins[0]);
      int minutes = Integer.valueOf(hoursMins[1]);
      calendar.set(Calendar.HOUR_OF_DAY, hours);
      calendar.set(Calendar.MINUTE, minutes);
      calendar.set(Calendar.SECOND, 0); // Here, I have no idea where you get the seconds, so I just set them to 0
      calendar.add(Calendar.DAY_OF_MONTH, -Integer.valueOf(selectedDays)); // Add a minus sign to substract
      // System.out.println(calendar.getTime());
      // Use a SimpleDateFormat instead

      System.out.println(outputFormat.format(calendar.getTime()));
      // System.out.println(calendar.getTime());
    } catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return outputFormat.format(calendar.getTime());
  }

如果您想了解格式化符号的好地方,请查看the bottom of this link,这是很好的解释。

使用此代码输出getFormattedDate("08-aug-2013", "2", "15:05");调用2013-08-06T15:05

编辑:我忘了秒,输出现在是:2013-08-06T15:05:00

答案 1 :(得分:0)

final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);

String date = mYear + "-" + mMonth + "-" + mDay; // + time + ... so on

答案 2 :(得分:0)

Calendar.add可以通过添加否定值来删除天数:

SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy");  <-- check your format      
Date d = format.parse("08-aug-2013");

Calendar c = new GregorianCalendar();
c.setTime(d);
c.add(Calendar.DAY_OF_MONTH, -2);  <-- see that you are parsing to a negative int
System.out.println(c.getTime());

打印:

  

2013年8月6日00:00:00 EDT 2013

答案 3 :(得分:0)

避免j.u.Date&amp; .Calendar

java.util.Date和.Calendar类非常麻烦。避免他们。而是使用Joda-Time库。

时区

其他答案忽略了时区的关键问题。您必须指定此字符串是否表示巴黎,Tukwila或加尔各答的日期时间。如果未指定,则应用JVM的默认时区。

语言

其他答案未能指定解析月名的语言。

使用Joda-Time

的示例
String input = "30-aug-2013" + "15:06";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "d-MM-yyyyH:mm" );
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
java.util.Locale locale = java.util.Locale.ENGLISH;
DateTime dateTime = formatter.withLocale( locale ).withZone( timeZone ).parseDateTime( input" );

如果需要,转换为java.util.Date,自动调整为UTC,因为日期没有时区。

java.util.Date date = dateTime.toDate();