JAVA string_helper

  1. 日期有关helper
获取日期时间段(JAVA)
/**
     * 计算两个时间内所有日期
     * @param date1
     * @param date2
     * @return
     * @throws ParseException
     */
    public static List<String> getDays(String date1, String date2) throws ParseException{
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Long startTime = sdf.parse(date1).getTime();
        Long endTime = sdf.parse(date2).getTime();

        List<String> dateList = new ArrayList<String>();
        Long oneDay = 1000 * 60 * 60 * 24l;

        Long time = startTime;
        while (time <= endTime) {
            Date d = new Date(time);
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            String date=df.format(d);
            System.out.println(date);
            dateList.add(date);
            time += oneDay;
        }
        return dateList;
    }
/**
     * 计算两个时间内 所有的周数 有点问题(不能按一周7天来计算)
     * @param date1
     * @param date2
     * @return
     * @throws ParseException
     */
    public static List<String> getWeeks(String date1, String date2) throws ParseException{
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date parse = sdf.parse(date1);
        Date parse2 = sdf.parse(date2);

        List<String> dateList = new ArrayList<>();
        Calendar c1=Calendar.getInstance();
        c1.setTime(parse);
        //转为周一
        int weekYear = c1.get(Calendar.YEAR);
        int weekOfYear = c1.get(Calendar.WEEK_OF_YEAR);
        c1.setWeekDate(weekYear, weekOfYear, Calendar.MONDAY);
        Calendar c2=Calendar.getInstance();
        c2.setTime(parse2);
        int weekYear2 = c2.get(Calendar.YEAR);
        int weekOfYear2 = c2.get(Calendar.WEEK_OF_YEAR);
        c2.setWeekDate(weekYear2, weekOfYear2, Calendar.SUNDAY);
        while (true) {
            int weekNum = c1.get(Calendar.WEEK_OF_YEAR);
            System.out.println(sdf.format(c1.getTime())+" : "+weekNum);
            dateList.add(c1.getWeekYear() + "-" + (weekNum > 9 ? weekNum : "0" + weekNum));
            if (c1.getTimeInMillis() >= c2.getTimeInMillis()) {
                break;
            }
            //增加7天,有问题哇
            c1.setTimeInMillis(c1.getTimeInMillis()+1000*60*60*24*7);
        }
        return dateList;
    }
/**
     * 计算两个时间中所有的月份
     * @param date1 开始时间
     * @param date2 结束时间
     * @return
     * @throws ParseException
     */
    public static List<String> getMonths(String date1, String date2) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

        Date parse = sdf.parse(date1);
        Date parse2 = sdf.parse(date2);
        List<String> dateList = new ArrayList<>();
        Calendar c1=Calendar.getInstance();
        c1.setTime(parse);
        //转为周一
        int year = c1.get(Calendar.YEAR);
        int month = c1.get(Calendar.MONTH);
        c1.set(year, month, 1, 0, 0, 0);
        Calendar c2=Calendar.getInstance();
        c2.setTime(parse2);
        int weekYear2 = c2.get(Calendar.YEAR);
        int weekOfYear2 = c2.get(Calendar.WEEK_OF_YEAR);
        c2.setWeekDate(weekYear2, weekOfYear2, Calendar.SUNDAY);
        while (true) {
            int tempMonth = c1.get(Calendar.MONTH);
            String date = c1.getWeekYear() + "-" + ((tempMonth + 1) <= 9 ? "0" + (tempMonth + 1) : tempMonth + 1);
            System.out.println(date);

            dateList.add(date);
            //下一个月<结束日期
            c1.set(Calendar.MONTH, tempMonth +1);
            if(c1.getTimeInMillis()>=c2.getTimeInMillis()){
                break;
            }
        }

        return dateList;
    }
date_helper(C#)
        public const string day_str = "天";
        public const string week_str = "周";
        public const string month_str = "月";
        public const string season_str = "季";
        public const string year_str = "年";
        public const string period_str = "旬";

        public const string period_str_format = "第{0}{1}";
        public const string year_format = "yyyy";
        public const string month_format = "yyyy-MM";
        public const string date_short_format = "MM-dd";
        public const string date_format = "yyyy-MM-dd";
        public const string date_time_short_format = "MMdd HH:mm";
        public const string date_time_format = "yyyy-MM-dd HH:mm:ss";
        public const string period_format = "{0}年{1}月{2}";

        public static DateTime convert_int_to_date_time(int time)
        {
            DateTime now = DateTime.Now;
            DateTime startTime = DateTime.Parse(now.ToShortDateString());
            return startTime.AddMinutes(time);
        }
        /// <summary>
        /// int 时间值 转换成 时间字符串
        /// </summary>
        /// <param name="time"></param>
        /// <param name="type">0,yyyy-MM-dd;1,yyyy-MM-dd HH:mm:ss</param>
        /// <returns></returns>
        public static string covert_int_to_date_time_string(int time, int type = 1)
        {
            string time_str = "";
            DateTime now = DateTime.Now;
            DateTime startTime = DateTime.Parse(now.ToShortDateString());
            if (type == 1)
                time_str = startTime.AddMinutes(time).ToString(date_time_format);
            else
                time_str = startTime.AddMinutes(time).ToString(date_format);

            return time_str;
        }
        public static DateTime convert_day_int_to_date(int day)
        {           
            DateTime now = DateTime.Now;
            DateTime startTime = DateTime.Parse(now.ToShortDateString());
            return startTime.AddDays(day);
        }

        /// <summary>
        /// int 天 转换成时间字符串
        /// </summary>
        /// <param name="day"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static string convert_day_int_to_date_time_string(int day,int type =0)
        {
            string time_str = "";
            DateTime now = DateTime.Now;
            DateTime startTime = DateTime.Parse(now.ToShortDateString());
            if (type == 1)
                time_str = startTime.AddDays(day).ToString(date_time_format);
            else
                time_str = startTime.AddDays(day).ToString(date_format);
            return time_str;
          
        }
        public static int convert_date_time_to_int(DateTime time)
        {
            DateTime now = DateTime.Now.Date;
            return (int)(time - now).TotalMinutes;
        }

        public static int convert_date_to_int(DateTime time)
        {
            DateTime now = DateTime.Now;
            DateTime startTime = DateTime.Parse(now.ToShortDateString());
            return (int)(time - startTime).TotalDays;
        }

        /// <summary>
        /// 日期(分钟) 转换为int
        /// </summary>
        /// <param name="time_str">日期</param>
        /// <returns></returns>
        public static int convert_date_time_to_int(string time_str)
        {
            return convert_date_time_to_int(DateTime.Parse(time_str));
        }
        /// <summary>
        /// 日期(天)转换为int
        /// </summary>
        /// <param name="time_str"></param>
        /// <returns></returns>
        public static int convert_date_to_int(string time_str)
        {
            return convert_date_to_int(DateTime.Parse(time_str));
        }


        /// <summary>
        /// 获取日期索引的对应中文名称
        /// </summary>
        /// <param name="period_type"></param>
        /// <param name="day_index"></param>
        /// <returns>
        /// 天: 返回MM-dd;
        /// 月: 返回yyyy-MM;
        /// 季度:返回第几季度;
        /// 年:返回yyyy;
        /// </returns>
        public static string get_period_name(period_type period_type, int day_index)
        {
            string period_name = "";
            int idx;
            DateTime date = convert_day_int_to_date(day_index);
            switch (period_type)
            {
                case period_type.day:
                    period_name = date.ToString(date_short_format);
                    break;
                case period_type.week:
                    idx = get_week_of_year(date);
                    period_name = string.Format(period_str_format, idx, week_str);
                    break;
                case period_type.month:
                    period_name = date.ToString(month_format);
                    break;
                case period_type.season:
                    idx = (date.Month + 2) / 3;
                    period_name = string.Format(period_str_format, idx, season_str);
                    break;
                case period_type.year:
                    period_name = date.ToString(year_format);
                    break;
                case period_type.period:
                    idx = get_period_date_name(date);
                    period_name = String.Format(period_format, date.Year, date.Month, (day_of_period)idx);
                    break;
            }

            return period_name;
        }

        private static int get_period_date_name(DateTime date)
        {
            int day = date.Day;
            if (day < 11)
            {
                return 0;
            }
            else if (day < 21)
            {
                return 1;
            }
            return 2;
        }


        public static object get_current_segment(period_type period_type, int day_index)
        {
            DateTime date = convert_day_int_to_date(day_index);
            if (period_type == period_type.day)
            {
                return date.ToString("MM-dd");
            }
            else if (period_type == period_type.week)
            {
                return get_week_of_year(date);
            }
            else if (period_type == period_type.month)
            {
                return date.Month;
            }
            else if (period_type == period_type.season)
            {
                return (date.Month + 2) / 3;
            }
            else if (period_type == period_type.period)
            {
                int idx = get_period_date_name(date);
                return (day_of_period)idx;
            }
            return day_index;
        }

        /// <summary>
        /// 获取下个周期的开始时间
        /// </summary>
        /// <param name="type">周期类型</param>
        /// <param name="start">上一个周期的start</param>
        /// <param name="week_type">0:年末周期跨年时不切割,1:年末周期跨年时切割为两个周期</param>
        /// <returns></returns>
        public static int find_next_period_start(period_type type, int start, bool is_year_seperate)
        {
            switch (type)
            {
                case period_type.day:
                    return ++start;
                case period_type.week:
                    return find_next_week_start(start, is_year_seperate);
                case period_type.month:
                    return find_next_month_start(start);
                case period_type.season:
                    return find_next_season_start(start);
                case period_type.period:
                    return find_next_period_start(start);
                default:
                    return 0;
            }
        }

        public static int get_week_of_year(DateTime date)
        {
            CultureInfo info = new CultureInfo(helper_strs.culture_info);
            Calendar calendar = info.Calendar;
            CalendarWeekRule week_rule = info.DateTimeFormat.CalendarWeekRule;
            int week = calendar.GetWeekOfYear(date, week_rule, DayOfWeek.Monday);
            return week;
        }

        /// <summary>
        /// 获取自然周的下周开始时间
        /// </summary>
        /// <param name="day"></param>
        /// <param name="type">0:年末周期跨年时不切割,1:年末周期跨年时切割为两个周期</param>
        /// <returns></returns>
        private static int find_next_week_start(int day, bool is_year_seperate)
        {
            DateTime target_day = DateTime.Today.AddDays(day);
            //当周还剩余的天数
            int residue = 7 - (target_day.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)target_day.DayOfWeek);
            int next_start = day + residue + 1;
            DateTime next_start_date = DateTime.Today.AddDays(next_start);
            if (target_day.Year != next_start_date.Year && is_year_seperate)
            {
                DateTime next_year_first_day_date = DateTime.Parse(next_start_date.Year + "-01-01");
                int next_year_first_day = (int)(next_year_first_day_date - DateTime.Today).TotalDays;
                if (next_start > next_year_first_day)
                {
                    return next_year_first_day;
                }
            }
            return next_start;
        }

        private static int find_next_month_start(int day)
        {
            DateTime target_day = DateTime.Today.AddDays(day);
            DateTime dayone = new DateTime(target_day.AddMonths(1).Year, target_day.AddMonths(1).Month, 1);
            return (int)(dayone - DateTime.Today).TotalDays;
        }

        private static int find_next_season_start(int day)
        {
            int next_month_start = find_next_month_start(day);
            DateTime target_day = DateTime.Today.AddDays(next_month_start);
            int diff_month = (3 - (target_day.Month + 2) % 3) % 3;
            target_day = target_day.AddMonths(diff_month);
            return (int)(target_day - DateTime.Today).TotalDays;
        }

        private static int find_next_period_start(int day) {

            DateTime target_day = DateTime.Today.AddDays(day);

            int _day = target_day.Day;

            int next_start = 0;

            if (_day < 11)//上旬
            {
                next_start = day + 10 - _day + 1;
            }
            else if (10 < _day && _day < 21)//中旬
            {
                next_start = day + 20 - _day + 1;
            }
            else { //下旬

                DateTime last_date = target_day.AddDays(1 - target_day.Day).AddMonths(1).AddDays(-1);

                next_start = day +  last_date.Day - _day + 1;
            }

            return next_start;

        }

        public static int get_day_count_between_dates(string earlier_date, string later_date)
        {
            DateTime early = DateTime.Parse(earlier_date);
            DateTime later = DateTime.Parse(later_date);
            return (later - early).Days;
        }

        public static void write_object_to_csv<T>(jnn_list<T> objs, string directory_name)
        {
            if (objs.size() > 0)
            {
                StringBuilder content = new StringBuilder();
                Type ty = objs.get(0).GetType();
                string file_name = ty.Name;
                FieldInfo[] fileds = ty.GetFields();
                for (int i = 0; i < fileds.Length; i++)
                {
                    content.Append(fileds[i].Name);
                    content.Append(",");
                }
                content.Remove(content.Length - 1, 1);
                content.Append("\n");
                for (int i = 0; i < objs.size(); i++)
                {
                    object obj = objs.get(i);
                    for (int j = 0; j < fileds.Length; j++)
                    {
                        content.Append(fileds[j].GetValue(obj));
                        content.Append(",");
                    }
                    content.Remove(content.Length - 1, 1);
                    content.Append("\n");
                }
                string directory_path = AppDomain.CurrentDomain.BaseDirectory + directory_name + "/";
                if (!Directory.Exists(directory_path))
                {
                    Directory.CreateDirectory(directory_path);
                }
                using (StreamWriter writer = new StreamWriter(directory_path + file_name + ".csv", false, Encoding.UTF8))
                {
                    writer.WriteLine(content);
                }
            }
        }

        public static int calculate_shift_time(string shift)
        {
            string[] shift_strings = shift.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
            int total_shift_time = 0;
            for (int i = 0; i < shift_strings.Length; i++)
            {
                string shift_string = shift_strings[i];
                string[] shift_times = shift_string.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                int start = calculate_minutes_by_time_string(shift_times[0]);
                int end = calculate_minutes_by_time_string(shift_times[1]);
                if (end <= start)
                {
                    end += limits.day_length;
                }
                total_shift_time += end - start;
            }
            return total_shift_time;
        }

        public static int calculate_minutes_by_time_string(string time_string)
        {
            string[] values = time_string.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
            int res = Convert.ToInt32(values[0]) * 60 + Convert.ToInt32(values[1]);
            return res;
        }

    }

判断时间格式是否正确
     /**
     * 是否是正确的时间格式
     *
     * @param date       a string of date
     * @param format_str a format of date
     * @return if date is in the form of the format
     * @author Liu Kunyuan
     */
    public static boolean is_correct_time_format(String date, String format_str, boolean is_exact) {
        if (string_helper.is_null_or_blank(date) || string_helper.is_null_or_blank(format_str)) {
            return false;
        }

        DateFormat df = new SimpleDateFormat(format_str);
        boolean res = true;
        try {
            df.parse(date);
            if (is_exact) {
                if (!date.equals(df.format(df.parse(date)))) {
                    return false;
                }
            }
        } catch (Exception e) {
            res = false;
        }

        return res;
    }
posted @ 2022-09-29 17:05  一枚废物  阅读(34)  评论(0)    收藏  举报