Android开发中如何实现将当前日期调整为明天的日期并展示
问题原因
直接对日字段的字符串转整数后加1的实现方式,没有处理跨月、跨年、闰年的边界场景,比如当月最后一天为31号时,加1会得到非法的32号,导致逻辑错误。另外Date和SimpleDateFormat为Java遗留时间API,存在线程安全、易出逻辑问题的缺陷,更推荐使用新版时间API实现需求。
方案1:使用java.time新版时间API(推荐)
Android API 26及以上直接支持,低版本可开启核心库desugar兼容,修改后代码如下:
package com.example.changetime; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Locale; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView dateOne = findViewById(R.id.dateOne); TextView dateTwo = findViewById(R.id.dateTwo); // 获取当前日期、明天日期 LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plusDays(1); // 格式化完整当前日期展示 DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern("dd-MM-yy", Locale.getDefault()); dateOne.setText(today.format(fullFormatter)); // 格式化明天的日字段展示 DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("dd", Locale.getDefault()); dateTwo.setText(tomorrow.format(dayFormatter)); } }
方案2:旧版本兼容方案(基于Calendar实现)
如果需要适配API 26以下的设备且不想开启desugar,可以用Calendar类自动处理日期进位,修改后代码如下:
package com.example.changetime; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView dateOne = findViewById(R.id.dateOne); TextView dateTwo = findViewById(R.id.dateTwo); // 展示当前完整日期 String currentDate = new SimpleDateFormat("dd-MM-yy", Locale.getDefault()).format(new Date()); dateOne.setText(currentDate); // 用Calendar计算明天日期,自动处理跨月跨年逻辑 Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH, 1); String tomorrowDay = new SimpleDateFormat("dd", Locale.getDefault()).format(calendar.getTime()); dateTwo.setText(tomorrowDay); } }
内容的提问来源于stack exchange,提问作者JackCohen
相关产品推荐
相关产品推荐

