Android 从给定的日期和时间创建30分钟的插槽
我有以下格式的时间 2015-10-28818:37:04.899+05:30 我必须以以下格式创建插槽 2015年10月28日上午11:00至下午12:00 2015年10月28日下午12:00至1:00 2015年10月28日下午1:00至2:00Android 从给定的日期和时间创建30分钟的插槽,android,date,datetime,simpledateformat,Android,Date,Datetime,Simpledateformat,我有以下格式的时间 2015-10-28818:37:04.899+05:30 我必须以以下格式创建插槽 2015年10月28日上午11:00至下午12:00 2015年10月28日下午12:00至1:00 2015年10月28日下午1:00至2:00 String timeValue=“2015-10-28818:37:04.899+05:30”; StringTokenizer StringTokenizer=新的StringTokenizer(时间值,“T”); String dateVa
String timeValue=“2015-10-28818:37:04.899+05:30”;
StringTokenizer StringTokenizer=新的StringTokenizer(时间值,“T”);
String dateValue=stringTokenizer.nextElement().toString();
字符串endDateValue=“2015-10-30”;
String restString=stringTokenizer.nextElement().toString();
StringTokenizer secondTokeniser=新的StringTokenizer(restString,“:”);
字符串小时数=secondTokeniser.nextElement().toString();
字符串分钟数=secondTokeniser.nextElement().toString();
小时=字符串.valueOf(整数.parseInt(小时)+2);
如果(整数.parseInt(分钟)>30){
分钟=“00”;
}否则{
分钟=“30”;
}
字符串amOrPm=null;
if(整数.parseInt(小时)<12){
amOrPm=“AM”;
}否则{
amOrPm=“PM”;
hours=String.valueOf(getHoursValue(Integer.parseInt(hours));
}
字符串time1=hours+“:“+minutes+”+amOrPm;
字符串time2=“12”+:“+”00“+”AM”;
字符串格式=“yyyy-mm-dd hh:mm-a”;
SimpleDataFormat sdf=新的SimpleDataFormat(格式);
试一试{
Date dateObj1=sdf.parse(dateValue+“”+time1);
Date dateObj2=sdf.parse(endDateValue+“”+time2);
Logger.d(标记“日期开始:”+dateObj1);
Logger.d(标记“日期结束:”+dateObj2);
long dif=dateObj1.getTime();
while(dif
根据上述代码,我得到的结果低于输出值
2015年1月28日星期三20:00:00 IST
2015年1月28日星期三20:30:00 IST
2015年1月28日星期三21:00:00 IST
2015年1月28日星期三21:30:00 IST
2015年1月28日星期三22:00:00 IST
2015年1月28日星期三22:30:00 IST
是24小时制的
我想要下面的输出格式
2015年10月28日上午11:00至下午12:00
2015年10月28日下午12:00至1:00
2015年10月28日下午1:00至2:00
关于这一点,任何人都可以帮助我吗?您可以使用以下内容,请注意,您应该使用
MM
而不是MM
。我添加了一个简单的getHoursValue
,因为我不知道你的
希望这有帮助
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
displayTimeSlots();
}
private int getHoursValue(int hours){
return hours - 12;
}
private void displayTimeSlots(){
String timeValue = "2015-10-28T18:37:04.899+05:30";
StringTokenizer stringTokenizer = new StringTokenizer(timeValue,"T");
String dateValue = stringTokenizer.nextElement().toString();
String endDateValue = "2015-10-30";
String restString= stringTokenizer.nextElement().toString();
StringTokenizer secondTokeniser = new StringTokenizer(restString,":");
String hours = secondTokeniser.nextElement().toString();
String minutes = secondTokeniser.nextElement().toString();
hours = String.valueOf(Integer.parseInt(hours) + 2);
if (Integer.parseInt(minutes) > 30){
minutes = "00";
}else{
minutes = "30";
}
String amOrPm;
if(Integer.parseInt(hours) < 12){
amOrPm = "AM";
}else{
amOrPm = "PM";
hours = String.valueOf(getHoursValue(Integer.parseInt(hours)));
}
String time1 = hours + ":" + minutes + " " + amOrPm;
String time2 = "12" + ":" + "00" + " AM ";
String format = "yyyy-MM-dd hh:mm a";
SimpleDateFormat sdf = new SimpleDateFormat(format);
try {
Date dateObj1 = sdf.parse(dateValue + " " + time1);
Date dateObj2 = sdf.parse(endDateValue + " " + time2);
Log.d("TAG", "Date Start: " + dateObj1);
Log.d("TAG", "Date End: " + dateObj2);
long dif = dateObj1.getTime();
while (dif < dateObj2.getTime()) {
Date slot1 = new Date(dif);
dif += 3600000;
Date slot2 = new Date(dif);
dif += 3600000;
SimpleDateFormat sdf1 = new SimpleDateFormat("hh:mm a");
SimpleDateFormat sdf2 = new SimpleDateFormat("hh:mm a, dd/MM/yy");
Log.d("TAG", "Hour slot = " + sdf1.format(slot1) + " - " + sdf2.format(slot2));
}
}catch (ParseException ex){
ex.printStackTrace();
}
}
}
你们可以得到你们的第一个时间间隔,类似的,你们可以找到你们剩下的两个时间间隔
String time ="2015-10-28T18:37:04.899+05:30";
try {
Date d= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").parse(time);
SimpleDateFormat dateFormat1=new SimpleDateFormat("hh:mm aaa dd/MM/yy");
String date =dateFormat1.format( d);
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat1.parse(date));
calendar.add(Calendar.HOUR, 1);
String one=dateFormat1.format(calendar.getTime());
String[] strings=date.split(" ");
one=(strings[0]+strings[1]+"-"+one);
System.out.println("Time here "+one);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我认为,这是你正在寻找的东西:
String timeValue = "2015-10-28T18:37:04.899+05:30";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
try {
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(sdf.parse(timeValue));
if (startCalendar.get(Calendar.MINUTE) < 30) {
startCalendar.set(Calendar.MINUTE, 30);
} else {
startCalendar.add(Calendar.MINUTE, 30); // overstep hour and clear minutes
startCalendar.clear(Calendar.MINUTE);
}
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(startCalendar.getTime());
// if you want dates for whole next day, uncomment next line
//endCalendar.add(Calendar.DAY_OF_YEAR, 1);
endCalendar.add(Calendar.HOUR_OF_DAY, 24 - startCalendar.get(Calendar.HOUR_OF_DAY));
endCalendar.clear(Calendar.MINUTE);
endCalendar.clear(Calendar.SECOND);
endCalendar.clear(Calendar.MILLISECOND);
SimpleDateFormat slotTime = new SimpleDateFormat("hh:mma");
SimpleDateFormat slotDate = new SimpleDateFormat(", dd/MM/yy");
while (endCalendar.after(startCalendar)) {
String slotStartTime = slotTime.format(startCalendar.getTime());
String slotStartDate = slotDate.format(startCalendar.getTime());
startCalendar.add(Calendar.MINUTE, 30);
String slotEndTime = slotTime.format(startCalendar.getTime());
Log.d("DATE", slotStartTime + " - " + slotEndTime + slotStartDate);
}
} catch (ParseException e) {
// date in wrong format
}
正如我在代码中提到的,您可以通过取消注释行endCalendar.add(Calendar.day\u OF_YEAR,1)来为整个第二天生成插槽代码>您好
var r=document.getElementById('rotu');
对于(让我=8;我真的不明白向下投票的意义,它在这里成了一种趋势,可能只是坏人不留理由地向下投票是的,我想他们喜欢这样做。是否有任何特定的登录来创建所需的输出!!意味着任何日期时间都会有相同的时间段,而不管date@MiteshParmar,没有,没有特定的登录。是的,没有下一天将有相同的时间段不客气,您应该在接受之前进行测试。但是,您的问题标题创建30分钟时间段
,问题正文1小时时间段
。因此,如果您需要30分钟,您可以将3600000
替换为1800000
:)是的,我将替换为180000。再次感谢您,先生,除了使用我们自己的逻辑,skywall已经使用日历给出了一个非常合适的答案,对不起,我只能给一个人赏金。我明白了,不要担心赏金,我只想确保我的答案是否适用于您的问题。原始代码是您的,我只是检查和修改它能很好地工作:)是的,这是真的。很抱歉,与其他解决方案相比,您的解决方案看起来整洁干净,一旦我测试代码,您就会接受。非常感谢您为所有场景提供了完美的答案,我已经为所有场景测试了此代码,包括2015年12月31日、月底和年底,它运行良好,我做了一些调整以完全满足我的要求,感谢一个完美生成时间段的插件。但我有一个小问题,我想在同一天从上午12点到晚上11点生成插槽,但它从上午12:30开始。通过输入“2016-11-03 00:00:00”。@Shyam首先删除if(startCalendar.get(Calendar.MINUTE)<30){…}
语句应该倾向于请求的行为。我得到了另一个完全符合我要求的答案。感谢@skywall的帮助。口头解释通常很有帮助
String time ="2015-10-28T18:37:04.899+05:30";
try {
Date d= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").parse(time);
SimpleDateFormat dateFormat1=new SimpleDateFormat("hh:mm aaa dd/MM/yy");
String date =dateFormat1.format( d);
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat1.parse(date));
calendar.add(Calendar.HOUR, 1);
String one=dateFormat1.format(calendar.getTime());
String[] strings=date.split(" ");
one=(strings[0]+strings[1]+"-"+one);
System.out.println("Time here "+one);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String timeValue = "2015-10-28T18:37:04.899+05:30";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
try {
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(sdf.parse(timeValue));
if (startCalendar.get(Calendar.MINUTE) < 30) {
startCalendar.set(Calendar.MINUTE, 30);
} else {
startCalendar.add(Calendar.MINUTE, 30); // overstep hour and clear minutes
startCalendar.clear(Calendar.MINUTE);
}
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(startCalendar.getTime());
// if you want dates for whole next day, uncomment next line
//endCalendar.add(Calendar.DAY_OF_YEAR, 1);
endCalendar.add(Calendar.HOUR_OF_DAY, 24 - startCalendar.get(Calendar.HOUR_OF_DAY));
endCalendar.clear(Calendar.MINUTE);
endCalendar.clear(Calendar.SECOND);
endCalendar.clear(Calendar.MILLISECOND);
SimpleDateFormat slotTime = new SimpleDateFormat("hh:mma");
SimpleDateFormat slotDate = new SimpleDateFormat(", dd/MM/yy");
while (endCalendar.after(startCalendar)) {
String slotStartTime = slotTime.format(startCalendar.getTime());
String slotStartDate = slotDate.format(startCalendar.getTime());
startCalendar.add(Calendar.MINUTE, 30);
String slotEndTime = slotTime.format(startCalendar.getTime());
Log.d("DATE", slotStartTime + " - " + slotEndTime + slotStartDate);
}
} catch (ParseException e) {
// date in wrong format
}
cz.skywall.stack D/DATE: 07:00PM - 07:30PM, 28/10/15
cz.skywall.stack D/DATE: 07:30PM - 08:00PM, 28/10/15
cz.skywall.stack D/DATE: 08:00PM - 08:30PM, 28/10/15
cz.skywall.stack D/DATE: 08:30PM - 09:00PM, 28/10/15
cz.skywall.stack D/DATE: 09:00PM - 09:30PM, 28/10/15
cz.skywall.stack D/DATE: 09:30PM - 10:00PM, 28/10/15
cz.skywall.stack D/DATE: 10:00PM - 10:30PM, 28/10/15
cz.skywall.stack D/DATE: 10:30PM - 11:00PM, 28/10/15
cz.skywall.stack D/DATE: 11:00PM - 11:30PM, 28/10/15
cz.skywall.stack D/DATE: 11:30PM - 12:00AM, 28/10/15
<div id="rotu">hello</div>
<script>
var r = document.getElementById('rotu');
for(let i=8;i<22;i++){
if(i.toString().length === 1){
i = '0'+i;
}
r.innerHTML += '<div>'+i+':00</div><div>'+i+':30</div>';
}
</script>