2013-03-14 2 views
0

У меня есть нижняя строка, которая вводится в мой метод. String xymessage = "Ваш товар (-и) будет готов сегодня для пикапа к 10:00 утра";как преобразовать строку в объект календаря в java

Теперь, как я могу преобразовать эту строку в объект календаря.

Я смог извлечь день, то есть. будь то «сегодня» или «завтра». А также время, то есть. "10:00 утра." , используя эти два параметра как входные, т.е. сегодня и 10:00 утра будет ли возможно преобразовать его в объект календаря? Пример фрагмента кода:

String xymessage="Your item(s) will be ready Today for pickup by 10:00 a.m.  "; 
if(null != xyMessage){ 
    //removing empty spaces. 
    xyMessage=xyMessage.trim(); 
    LOGGER.debug("sellerId:"+delivSeller.getSellerId()+" and xymessage:"+xyMessage); 
    if(xyMessage.contains("Today")){ 
     //this means its today 
     String[] xyArray = xyMessage.split("pickup by"); 
     if(xyArray.length == 2){ 
      String timeVal=xyArray[1]; 
     } 
    }else{ 
     //this means its tomorrow 
    } 
} 
+1

Как вы будете обрабатывать такие сценарии, как: «Ваш товар (ы) будет готов к отправке послезавтра в 10:00 утра»; – NeilA

+0

@NeilA, Не понял ваш вопрос. вы можете подробно рассказать. –

+0

Как было предложено Uba, у Calender есть способы установить/получить/добавить (или обратно вычесть) из календаря. В моем комментарии был формат строки ... Где эта строка исходит из ie: System Generated, User Input ... Если система сгенерирована, то почему бы просто не отправить дату и время отправки до этого кода, таким образом вам нужно использовать SimpleDateFormat. Если пользователь вводит то, как вы будете обрабатывать все сценарии и возможные форматы сообщений, в этом случае я предпочитаю, чтобы пользователь указывал дату (и время) и генерировал код из этого кода. – NeilA

ответ

0

Использование Calendar cal = Calendar.getInstance() получить календарь объект с текущей датой и временем. Используя методы add(), get() и set(), вы можете правильно установить объект календаря. Например, чтобы изменить дату на завтра, вы можете: cal.add(Calendar.DAY_OF_MONTH, 1);

Чтобы установить час, cal.set(Calendar.HOUR, hr);, где hr был инициализирован установленным часом. Аналогично для минут и т. Д.

0

Вы можете использовать SimpleDateFormat для нужного вам формата. Но поскольку у вас есть м. Или п.м. вместо простого простого AM/PM это немного осложняет ситуацию. Проверьте приведенный ниже код, если он помогает для «сегодняшнего» состояния: Здесь переменная «время» - это то, что вы извлекли как «10:00 am.m».

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
    Date date = new Date(); 
    String timeArray[]=time.split(" "); 
    String minArray[]=timeArray[0].split(":"); 
    date.setHours(Integer.parseInt(minArray[0])); 
    date.setMinutes(Integer.parseInt(minArray[1])); 
    if(!timeArray[1].startsWith("a")){ 
     date.setHours(date.getHours()+12); 
    } 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
0
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
/** 
* 
* @author Administrator 
*/ 
public class Test { 

    public static void main(String[] args) throws ParseException { 
    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa"); 
    SimpleDateFormat finalFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm aa"); 
    Calendar today = Calendar.getInstance(); 
    Calendar tomorrow = Calendar.getInstance(); 
    tomorrow.add(Calendar.DATE, 1); 

    String xyMessage = "Your item(s) will be ready Today for pickup by 10:00 a.m.  "; 
    if (null != xyMessage) { 
     //removing empty spaces. 
     xyMessage = xyMessage.trim(); 
     if (xyMessage.contains("Today")) { 
     //this means its today 
     String[] xyArray = xyMessage.split("pickup by "); 
     String time = xyArray[1].replace(".", ""); 

     today.set(Calendar.HOUR_OF_DAY, sdf.parse(time).getHours()); 
     System.out.println("calendar:" + finalFormat.format(today.getTime())); 

     } else { 
     //this means its tomorrow 
     String[] xyArray = xyMessage.split("pickup by "); 
     String time = xyArray[1].replace(".", ""); 

     tomorrow.set(Calendar.HOUR_OF_DAY, sdf.parse(time).getHours()); 
     System.out.println("calendar:" + finalFormat.format(tomorrow.getTime())); 
     } 
    } 
    } 
} 

просто использовать SimpleDateFormat ("чч: мм аа")

0

Попробуйте ниже код.

String val = "10:00 a.m"; 
    val = val.replace(".", ""); 

    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm a"); 
    Calendar temp = Calendar.getInstance(); 
    temp.setTime(dateFormat.parse(val)); 

    Calendar cal = Calendar.getInstance(); 

    if ("tomorrow".equalsIgnoreCase("YOUR_STRING")) { 
     cal.add(Calendar.DAY_OF_YEAR, 1); 
    } 

    cal.set(Calendar.HOUR_OF_DAY, temp.get(Calendar.HOUR_OF_DAY)); 
    cal.set(Calendar.MINUTE, temp.get(Calendar.MINUTE)); 

    System.out.println(cal.get(Calendar.DAY_OF_MONTH) + ":" 
      + (cal.get(Calendar.MONTH) + 1) + ":" 
      + cal.get(Calendar.HOUR_OF_DAY) + ":" 
      + cal.get(Calendar.MINUTE)); 
} 
Смежные вопросы