object TimeUtils {
def main(args: Array[String]): Unit = {
}
/**
* 计算所在地区的时区
* @param lon
* @return
*/
def getTimeZone(lon: Double): Int = {
var time_zone = 0
if (lon > 0) {
if (lon > 7.5) {
time_zone = ((lon - 7.5) / 15 + 1).toInt
}
} else if (lon < 0) {
if (lon < -7.5) {
time_zone = ((lon + 7.5) / 15 - 1).toInt
}
}
(time_zone)
}
/**
* 计算所在地区的年份
* @param utc
* @param lon
* @return
*/
def getLocalYear(utc: Int, lon: Double): String = {
// yyyy-MM-dd HH:mm:ss
val fm = new SimpleDateFormat("yyyy")
val localtime = utc + getTimeZone(lon) * 3600
val year = fm.format(new Date((localtime - 8 * 3600) * 1000l))
year
}
/**
* 计算所在地区的日期(时间戳形式)
* @param utc
* @param lon
* @return
*/
def getLocalTime(utc: Int, lon: Double): Int = {
utc + getTimeZone(lon) * 3600
}
/**
* 获取所在地的季节
*
* @param utc
* @param lon
* @param lat
* @return
*/
def getLocalSeason(utc: Int, lon: Double, lat: Double): String = {
// 获取所在地的年份
val year = getLocalYear(utc, lon)
// 获取本地时间(也就是所在时区的时间)
val localTime = getLocalTime(utc, lon)
var season = ""
// 春分Spring Equinoxp夏至Summer Solstice,秋分Autumn Equinox冬至Winter Solstice
// 当年的春分日期和春分日期对应的utc
val springEquinoxp = TimeUtils.getYearDay(Integer.parseInt(year), 3, 21)
val localSpring = getLocalTime(tranTimeToLong(springEquinoxp).toInt, lon)
// 当年的夏至日期和夏至日期对应的utc
val summerSolstice = TimeUtils.getYearDay(Integer.parseInt(year), 6, 21)
val localSummer = tranTimeToLong(summerSolstice) + getTimeZone(utc) * 3600
// 当年的秋分日期和秋分日期对应的utc
val autumnEquinox = TimeUtils.getYearDay(Integer.parseInt(year), 9, 21)
val localAutumn = tranTimeToLong(autumnEquinox) + getTimeZone(utc) * 3600
// 当年的冬至日期和冬至日期对应的utc
val winterSolstice = TimeUtils.getYearDay(Integer.parseInt(year), 12, 21)
val localWinter = tranTimeToLong(winterSolstice) + getTimeZone(utc) * 3600
// 北半球
if (lat >= 0) {
if (localTime >= localSpring && localTime < localSummer) {
season = "spring"
} else if (localTime >= localSummer && localTime < localAutumn) {
season = "summer"
} else if (localTime >= localAutumn && localTime < localWinter) {
season = "autumn"
} else {
season = "winter"
}
} else {
// 南半球跟北半球相反
if (localTime >= localSpring && localTime < localSummer) {
season = "autumn"
} else if (localTime >= localSummer && localTime < localAutumn) {
season = "winter"
} else if (localTime >= localAutumn && localTime < localWinter) {
season = "spring"
} else {
season = "summer"
}
}
season
}
/**
* 获取某年某月某日的date
*
* @param year
* @param month
* @param day
* @return
*/
def getYearDay(year: Int, month: Int, day: Int): String = {
val fmDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
// 获得当前日期对象
val cal = Calendar.getInstance
// 清除信息
cal.clear()
cal.set(Calendar.YEAR, year)
// 1月从0开始
cal.set(Calendar.MONTH, month - 1)
// 当月1号
cal.set(Calendar.DAY_OF_MONTH, day)
fmDate.format(cal.getTime)
}
/**
* 将日期转换为时间戳
*/
def tranTimeToLong(tm: String): Long = {
val fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val dt = fm.parse(tm)
val aa = fm.format(dt)
val tim: Long = dt.getTime()
tim / 1000
}
/**
* 将时间戳转换为日期
*/
def tranTimeToString(tm: String): String = {
val fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val tim = fm.format(new Date(tm.toLong * 1000))
tim
}
}
根据UTC和经纬度计算当地年份、季节、时区等的时间类工具
猜你喜欢
转载自blog.csdn.net/qq_39313597/article/details/88873425
今日推荐
周排行