/*
* Copyright (c) 2014-2015 Sean Liu.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.baoti.pioneer.misc.util;
import android.os.Looper;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* Date 格式转换工具
*/
public class DateFormats {
private static final Ui uiFormat = new Ui();
private static final LocalStorage localStorageFormat = new LocalStorage();
private static final Api apiFormat = new Api();
private static boolean isUiThread() {
return Looper.getMainLooper() == Looper.myLooper();
}
public static Ui ui() {
if (isUiThread()) {
return uiFormat;
} else {
return new Ui();
}
}
public static LocalStorage localStorage() {
if (isUiThread()) {
return localStorageFormat;
} else {
return new LocalStorage();
}
}
public static Api api() {
if (isUiThread()) {
return apiFormat;
} else {
return new Api();
}
}
// 由于 SimpleDateFormat 不是线程安全的, 此类也不是线程安全的
public static class Base {
private final DateFormat datetimeFormat;
public Base(DateFormat datetime) {
datetimeFormat = datetime;
}
public DateFormat getDatetimeFormat() {
return datetimeFormat;
}
public String currentDatetime() {
return toDatetime(new Date());
}
public String toDatetime(Date date) {
if (date == null) {
return null;
}
return getDatetimeFormat().format(date);
}
public Date fromDatetime(String datetime, Date defVal) {
try {
return fromDatetimeOrThrow(datetime);
} catch (ParseException e) {
return defVal;
}
}
public Date fromDatetimeOrThrow(String datetime) throws ParseException {
if (datetime == null) {
throw new ParseException("datetime is null", -1);
}
return getDatetimeFormat().parse(datetime);
}
}
/**
* UI 中使用的格式
*/
public static class Ui extends Base {
/**
* UI 中使用的时间格式
*/
public static final String DATETIME = "yyyy-MM-dd HH:mm:ss";
public Ui() {
super(new SimpleDateFormat(DATETIME));
}
}
/**
* 本地存储 中使用的格式, 包括文件和数据库
*/
public static class LocalStorage extends Base {
/**
* 本地存储中使用的时间格式
*/
public static final String DATETIME = "yyyy-MM-dd HH:mm:ss";
public LocalStorage() {
// 始终使用同一个 locale 来格式化
super(new SimpleDateFormat(DATETIME, Locale.CHINA));
}
}
public static class Api extends Base {
/**
* API 要求的时间格式
*/
public static final String DATETIME = "yyyy-MM-dd HH:mm:ss";
public Api() {
super(new SimpleDateFormat(DATETIME, Locale.CHINA));
}
}
}