字符串转化练习| 青训营

161 阅读5分钟

把字符串1998-10-01 08:10:00 解析成time.Time ,再格式化成字符串 199810010810

思路分析

把字符串s1转时间,那就得先弄出 时间的格式

时间格式有两种 下面代码实例的 format1和format2

    format1 := "2006-01-02 15:04:05" //  时间字符串格式
    format2 := "20060102150405"      //  另一种 时间格式字符串

那就先把字符串 s1解析为时间字符串

使用 time.ParseInLocation()

ParseInLocationh函数:

第一个参数:时间格式化字符串,用于指定输入时间字符串的格式。

第二个参数:要解析的时间字符串,其格式必须与第一个参数指定的时间格式相匹配。

第三个参数:要使用的时区信息,是一个 time.Location 类型的对象。

解析完成后,再用Format函数转化成format2格式

time.Format()函数:

func (t Time) Format(layout string) string

这个参数layout是一个模板字符串,用于指定时间的输出格式

意思是 我调用这个函数将我自己转化成为参数的格式,返回值是 转化后的格式也就是s2(19981001081000)

代码实现:

package main

import (
	"fmt"
	"time"
)

func timeFormat() {

	format1 := "2006-01-02 15:04:05" //  时间字符串格式
	format2 := "20060102150405"      //  另一种 时间格式字符串

	s1 := "1998-10-01 08:10:00"
	loc, _ := time.LoadLocation("Asia/Shanghai")   // 加载指定时区的信息
	t, _ := time.ParseInLocation(format1, s1, loc) //  参数1是时间格式化字符串,参数2是要解析的时间字符串,参3是时区,返回参数2解析后
	s2 := t.Format(format2)                        // t转化为 format2格式
	fmt.Println(s2)                                // 19981001081000

}

输出未来上课日期

我们是周六上课,输出我们未来4次课的上课日期(不考虑法定假日)

思路分析

  1. 获取当前时间: 代码开始时,通过调用 time.Now() 函数获取了当前的日期和时间,将结果存储在 now 变量中。
  2. 计算距离下个周六还有多少天: 通过计算当前日期的星期几(now.Weekday())和距离下个周六还有多少天(sub 变量)来确定下个周六的日期。如果今天就是周六(sub 等于 0),则将 interval 设置为 7,表示一周后的周六。
  3. 获取最近一个周六的日期: 使用 nowinterval 计算了最近一个周六的日期,并将结果存储在 firstSaturday 变量中。这个日期代表了第一个上课日期。
  4. 循环计算未来的上课日期: 使用 for 循环,代码计算并输出未来三个周六的日期。在每次迭代中,通过将 firstSaturday 增加 7 天(一周的时间间隔),来计算下一个上课日期。
  5. 打印输出: 使用 fmt.Println() 函数,将当前日期和计算出的上课日期打印到标准输出,以便用户查看。

总的来说,代码的目标是计算和输出未来几个周六的上课日期。它从当前日期出发,通过日期和时间的操作,确定了第一个上课日期,并在循环中计算并输出了未来的日期。这个代码示例可以用于类似课程计划或活动计划的应用中,以确定未来的特定日期。

代码实现

package main

import (
	"fmt"
	"time"
)

func keDay() {
    //1.先获取当前时间
	now := time.Now()
    
    //2.1寻找距离下个周六还有多久
	sub := 6 - int(now.Weekday())
	fmt.Println(sub) //
	interval := sub  // 下一个周距今天隔了几天
	if sub == 0 {
		interval = 7
	}
    //2.2获取最近一个周六的时间
	firstSatuday := now.Add(24 * time.Duration(interval) * time.Hour)
	fmt.Println(firstSatuday.Format("2006-01-02"))

    //3.遍历循环 每次 +7天
	for i := 0; i < 3; i++ {
		firstSatuday = firstSatuday.Add(24 * 7 * time.Hour)
		fmt.Println(firstSatuday)
	}
}

注意事项

  1. time.Now(): 这个函数用于获取当前的日期和时间。
  2. now.Weekday(): 这个方法用于获取当前日期是一周中的哪一天(星期几),返回值是一个 time.Weekday 类型的枚举值,例如 time.Sundaytime.Monday 等。
  3. fmt.Println(): 这个函数用于在控制台上打印输出信息。它在代码中用于输出计算结果和调试信息。
  4. time.Duration: 这个类型表示时间间隔,例如 24 * time.Hour 表示一天的时间间隔。
  5. now.Add(): 这个方法用于在当前时间的基础上添加一个时间间隔,从而得到一个新的时间。

在这段代码中,首先获取了当前日期和时间,然后计算了距离下个周六还有多少天,以确定第一个上课日期。然后,使用一个循环来计算并输出未来几个周六的日期,每次将日期增加一周。

注意事项和建议:

  1. 代码中的日期计算是基于当前日期进行的。因此,确保代码在执行时的日期和时间是正确的,以获得正确的结果。
  2. 如果需要计算不同的上课日期,可以调整循环次数或修改日期增加的方式。例如,如果需要计算未来三个周五的日期,可以将 firstSaturday = firstSaturday.Add(24 * 7 * time.Hour) 改为 firstSaturday = firstSaturday.Add(24 * 7 * time.Hour)
  3. 考虑将日期格式作为参数进行配置,以使代码更灵活。在代码中使用 time.Format() 函数可以根据需要输出不同的日期格式。
  4. 为了提高代码的可维护性,可以将日期计算和输出逻辑封装成函数,并为函数提供适当的注释和文档。
  5. 在实际应用中,还应该处理错误和异常情况,例如输入无效日期时的错误处理。这个示例代码中没有包含错误处理,但在生产环境中通常需要添加。