Java & Groovy 转换时间戳字符串

前言

要利用Groovy脚本处理 Jira中 Date Picker 类型字段值。涉及到了类型解析转换的问题。特此总结记录一下各种转换方法。

Groovy的 - 转换时间戳字符串大纪元时间(毫秒)

import java.time.*

// build time as string
def build_time='2017-11-20T21:27:03Z'
log.warn("build_time:${build_time}")
// parse and get epoch
def time=Date.parse("yyyy-MM-dd'T'HH:mm:ss'Z'", build_time)
log.warn("time:${time}")

// get epoch milis:"获取纪元milis"
def epoch_milis = time.getTime()
log.warn("epoch_milis:${epoch_milis}")

// create UTC local time
def local_dt = LocalDateTime.ofInstant(Instant.ofEpochMilli(epoch_milis), ZoneId.of('UTC'));
log.warn("local_dt:${local_dt}")

// created zoned time out of UTC time
def zoned_dt = local_dt.atZone(ZoneId.of('America/Los_Angeles'))
log.warn("zoned_dt:${zoned_dt}")

// get offset in milis:以毫米为单位获取偏移量
def offset_ms = zoned_dt.getOffset().getTotalSeconds() * 1000
log.warn("offset_ms:${offset_ms}")

// add to UTC epoc
def local_timestamp = epoch_milis + offset_ms
log.warn("local_timestamp: ${local_timestamp}")

println "Time is ${local_timestamp}"



import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.fields.CustomField
import java.sql.Timestamp

def customFieldManager = ComponentAccessor.getCustomFieldManager()

final customFieldName = '测试完成时间(实际)'

// the value of the new option to set
final newValue = 'Option C'

// the issue key to update
final issueKey = 'TEST-17643'

def issue = ComponentAccessor.issueManager.getIssueByCurrentKey(issueKey)
assert issue: "Could not find issue with key $issueKey"

def customField = ComponentAccessor.customFieldManager.getCustomFieldObjects(issue).findByName(customFieldName)
assert customField: "Could not find custom field with name $customFieldName"

CustomField destField = customFieldManager?.getCustomFieldObjectsByName(customFieldName)?.first()
def dateValue = issue.getCustomFieldValue(destField)
log.warn("dateValue:${dateValue}")

//转换字符串到jira中DatePicker类型字段
def stringTotimestamp = {String wantedDate ->
    def date = Date.parse('yyyy-MM-dd HH:mm:ss.S', wantedDate)
    log.warn("date:${date}")
    def dategetTime = date.getTime()
    log.warn("dategetTime:${dategetTime}")
    return new Timestamp(date.getTime())
}

//newValue for datePicker customField
final wantedDateAsStr = '2022-08-15 00:00:00.0'
def wantedDate = stringTotimestamp(wantedDateAsStr)
log.warn("wantedDate:${wantedDate}")

2023-02-02 17:19:42,909 WARN [runner.ScriptBindingsManager]: build_time:2017-11-20T21:27:03Z
2023-02-02 17:19:42,910 WARN [runner.ScriptBindingsManager]: time:Mon Nov 20 21:27:03 CST 2017
2023-02-02 17:19:42,911 WARN [runner.ScriptBindingsManager]: epoch_milis:1511184423000
2023-02-02 17:19:42,942 WARN [runner.ScriptBindingsManager]: local_dt:2017-11-20T13:27:03
2023-02-02 17:19:42,948 WARN [runner.ScriptBindingsManager]: zoned_dt:2017-11-20T13:27:03-08:00[America/Los_Angeles]
2023-02-02 17:19:42,972 WARN [runner.ScriptBindingsManager]: offset_ms:-28800000
2023-02-02 17:19:42,972 WARN [runner.ScriptBindingsManager]: local_timestamp: 1511155623000

JAVA中java.util.Date、java.sql.Timestamp和String之间的互相转换

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * 关于java.util.Date、java.sql.Timestamp和String之间的互相转换的方法
 * 
 */
public class DateUtil {

    /**
     * 将 String字符串————》java.util.Date格式日期
     *
     * @param strDate
     *            表示日期的字符串
     * @param dateFormat
     *            传入字符串的日期表示格式(如:"yyyy-MM-dd HH:mm:ss")
     * @return java.util.Date类型日期对象(如果转换失败则返回null)
     */
    public static java.util.Date strToUtilDate(String strDate, String dateFormat) {
        SimpleDateFormat sf = new SimpleDateFormat(dateFormat);
        java.util.Date date = null;
        try {
            date = sf.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 将String字符串————》java.sql.Timestamp格式日期,用于数据库保存
     *
     * @param strDate
     *            表示日期的字符串
     * @param dateFormat
     *            传入字符串的日期表示格式(如:"yyyy-MM-dd HH:mm:ss")
     * @return java.sql.Timestamp类型日期对象(如果转换失败则返回null)
     */
    public static java.sql.Timestamp strToSqlDate(String strDate, String dateFormat) {
        SimpleDateFormat sf = new SimpleDateFormat(dateFormat);
        java.util.Date date = null;
        try {
            date = sf.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        java.sql.Timestamp dateSQL = new java.sql.Timestamp(date.getTime());
        return dateSQL;
    }

    /**
     * 将java.util.Date对象 ————》String字符串
     *
     * @param date
     *            要格式的java.util.Date对象
     * @param strFormat
     *            输出的String字符串格式的限定(如:"yyyy-MM-dd HH:mm:ss")
     * @return 表示日期的字符串
     */
    public static String dateToStr(java.util.Date date, String strFormat) {
        SimpleDateFormat sf = new SimpleDateFormat(strFormat);
        String str = sf.format(date);
        return str;
    }

    /**
     * 将java.sql.Timestamp对象 ————》 String字符串
     *
     * @param time
     *            要格式的java.sql.Timestamp对象
     * @param strFormat
     *            输出的String字符串格式的限定(如:"yyyy-MM-dd HH:mm:ss")
     * @return 表示日期的字符串
     */
    public static String dateToStr(java.sql.Timestamp time, String strFormat) {
        DateFormat df = new SimpleDateFormat(strFormat);
        String str = df.format(time);
        return str;
    }

    /**
     * 将java.sql.Timestamp对象 ————》 java.util.Date对象
     *
     * @param time
     *            要转化的java.sql.Timestamp对象
     * @return 转化后的java.util.Date对象
     */
    public static java.util.Date timeToDate(java.sql.Timestamp time) {
        return time;
    }

    /**
     * 将java.util.Date对象 ————》java.sql.Timestamp对象
     *
     * @param date
     *            要转化的java.util.Date对象
     * @return 转化后的java.sql.Timestamp对象
     */
    public static java.sql.Timestamp dateToTime(java.util.Date date) {
        String strDate = dateToStr(date, "yyyy-MM-dd HH:mm:ss SSS");
        return strToSqlDate(strDate, "yyyy-MM-dd HH:mm:ss SSS");
    }

    /**
     * 返回表示系统当前时间的java.util.Date对象
     * @return  返回表示系统当前时间的java.util.Date对象
     */
    public static java.util.Date nowDate(){
        return new java.util.Date();
    }

    /**
     * 返回表示系统当前时间的java.sql.Timestamp对象
     * @return  返回表示系统当前时间的java.sql.Timestamp对象
     */
    public static java.sql.Timestamp nowTime(){
        return dateToTime(new java.util.Date());
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值