Android 小技巧之日期/时间/星期/上午
2021-03-18 本文已影响0人
Kevin_小飞象
每日一图.jpg
1. 效果图 12.jpg
2. strings.xml
<string name="week_sunday">星期日</string>
<string name="week_monday">星期一</string>
<string name="week_tuesday">星期二</string>
<string name="week_wednesday">星期三</string>
<string name="week_thursday">星期四</string>
<string name="week_friday">星期五</string>
<string name="week_saturday">星期六</string>
<string name="day_am">上午</string>
<string name="day_pm">下午</string>>
3. DateUtils.java
/**
* Created on 2021/3/18 11:22
*
* @author Gong Youqiang
*/
public class DateUtils {
/**
* 获取时间
* @param context
* @return
*/
public static String getNowTime(Context context){
Date now = Calendar.getInstance().getTime();
SimpleDateFormat format;
if(DateFormat.is24HourFormat(context)){
format = new SimpleDateFormat("HH:mm", Locale.getDefault());
} else {
format = new SimpleDateFormat("hh:mm", Locale.getDefault());
}
return format.format(now);
}
/**
* 获取日期
* @return
*/
public static String getNowDate(){
Date now = Calendar.getInstance().getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd", Locale.getDefault());
return format.format(now);
}
public static String getNowWeek() {
Date now = Calendar.getInstance().getTime();
SimpleDateFormat format = new SimpleDateFormat("EEE", Locale.getDefault());
return format.format(now);
}
/**
* 获取星期几
* @param context
* @return
*/
public static String getNowWeek(Context context) {
Calendar cal = Calendar.getInstance();
Date now = Calendar.getInstance().getTime();
cal.setTime(now);
int i = cal.get(Calendar.DAY_OF_WEEK);
switch (i) {
case 1:
return context.getString(R.string.week_sunday);
case 2:
return context.getString(R.string.week_monday);
case 3:
return context.getString(R.string.week_tuesday);
case 4:
return context.getString(R.string.week_wednesday);
case 5:
return context.getString(R.string.week_thursday);
case 6:
return context.getString(R.string.week_friday);
case 7:
return context.getString(R.string.week_saturday);
default:
return "";
}
}
/**
* 获取上下午
* @param context
* @return
*/
public static String getNowAmPm(Context context) {
Calendar cal = Calendar.getInstance();
Date now = Calendar.getInstance().getTime();
cal.setTime(now);
int i = cal.get(Calendar.AM_PM);
switch (i) {
case 0:
return context.getString(R.string.day_am);
case 1:
return context.getString(R.string.day_pm);
default:
return "";
}
}
}
4.DateManager.java
/**
* Created on 2021/3/18 11:22
*
* @author Gong Youqiang
*/
public class DateManager {
private String mDate;
private String mWeek;
private String mTime;
private String mAmPm;
private TimeChangedListener mTimeChangedListener;
private Timer mTimer;
private Context mContext;
public DateManager(Context context, TimeChangedListener listener){
mTimeChangedListener = listener;
mContext = context;
}
public String getDate() {
return mDate;
}
public String getWeek() {
return mWeek;
}
public String getampm(){
return mAmPm;
}
public String getTime() {
return mTime;
}
public void start() {
stop();
mDate = DateUtils.getNowDate();
mWeek = DateUtils.getNowWeek(mContext);
mTime = DateUtils.getNowTime(mContext);
mAmPm = DateUtils.getNowAmPm(mContext);
if(mTimeChangedListener != null){
mTimeChangedListener.onChanged(DateManager.this);
}
mTimer = new Timer();
mTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
String date = DateUtils.getNowDate();
String week = DateUtils.getNowWeek(mContext);
String time = DateUtils.getNowTime(mContext);
String ampm = DateUtils.getNowAmPm(mContext);
if(!date.equals(mDate) || !week.equals(mWeek) || !time.equals(mTime)|| !ampm.equals(mAmPm)){
mDate = date;
mTime = time;
mWeek = week;
mAmPm = ampm;
if(mTimeChangedListener != null){
mTimeChangedListener.onChanged(DateManager.this);
}
}
}
},0,500);
}
public void stop() {
if(mTimer != null){
mTimer.cancel();
mTimer = null;
}
}
public interface TimeChangedListener{
void onChanged(DateManager dateManager);
}
}
5. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/black"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_time_day"
android:layout_width="@dimen/x382"
android:layout_height="@dimen/y130"
android:includeFontPadding="false"
android:text="10:46"
android:textColor="@android:color/white"
android:textSize="@dimen/x114"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="@dimen/x338"
android:layout_height="@dimen/y28"
android:layout_marginRight="@dimen/x22"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent">
<TextView
android:id="@+id/tv_time_date"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:includeFontPadding="false"
android:text="2019.01.29"
android:textColor="@android:color/white"
android:textSize="@dimen/x28" />
<TextView
android:id="@+id/tv_time_week"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/x10"
android:includeFontPadding="false"
android:text="星期二"
android:textColor="@android:color/white"
android:textSize="@dimen/x28" />
<TextView
android:id="@+id/tv_time_AmPm"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/x10"
android:includeFontPadding="false"
android:text="下午"
android:textColor="@android:color/white"
android:textSize="@dimen/x28" />
</LinearLayout>
</LinearLayout>
6. MainActivity.java
public class MainActivity extends AppCompatActivity {
@BindView(R.id.tv_time_date)
TextView mTimeDate;
@BindView(R.id.tv_time_day)
TextView mDay;
@BindView(R.id.tv_time_week)
TextView mWeek;
@BindView(R.id.tv_time_AmPm)
TextView mAmPm;
private DateManager mDateManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
mDateManager = new DateManager(this, new DateManager.TimeChangedListener() {
@Override
public void onChanged(DateManager dateManager) {
mTimeDate.post(new Runnable() {
@Override
public void run() {
mTimeDate.setText(dateManager.getDate());
mDay.setText(dateManager.getTime());
mWeek.setText(dateManager.getWeek());
mAmPm.setText(dateManager.getampm());
}
});
}
});
mDateManager.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mDateManager!=null) {
mDateManager.stop();
}
}
}